我有一個基本的表單,可以通過 PHP 將評論提交到數據庫并通過 AJAX 將它們顯示在頁面上,一切正常,但問題是簡單的 HTML 代碼類似于<script>alert('Message')</script>或<h1>Hi!</h1>顯示有效的 HTML,并由客戶端執行。經過研究,我發現 PHPhtmlspecialchars()函數可以阻止 XSS 代碼的執行:<form method="post" action="<?PHP echo htmlspecialchars($_SERVER['PHP_SELF']);?>" onsubmit="return post();"> <textarea id="comment"></textarea> <input type="submit" value="Submit"></form>處理表單的 PHP 文檔是這樣的:<?phperror_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);$host="localhost";$username="user";$password="password";$databasename="comments";$connect=mysql_connect($host,$username,$password);$db=mysql_select_db($databasename);if(isset($_POST['user_comm'])){ $comment = mysql_real_escape_string($_POST['user_comm']); $insert=mysql_query("insert into comments values('','$comment',CURRENT_TIMESTAMP)"); $id=mysql_insert_id(); $select=mysql_query("select comment,post_time from comments where comment='$comment' and id='$id'"); if($row=mysql_fetch_array($select)) { $comment = mysql_real_escape_string($row['comment']); $time=$row['post_time']; ?> <div class="comment_div"> <p class="comment"><?php echo stripslashes($comment);?></p> <p class="time"><?php echo date('l d M Y - H:i a', strtotime($time));?></p> </div> <?php }exit;}?>但是在我的情況下,這不起作用,并且在發送消息后客戶端仍會執行 Javascript 代碼。如何在評論中將 HTML 特殊字符顯示為純文本以防止出現這種情況?
PHP 表單將 HTML 特殊字符作為純文本發布
慕的地8271018
2022-01-02 15:48:10