過濾輸入htmlentities與htmlspecialchars用法


  過濾輸入 (即來自所列數據源中的任何數據)是指,轉義或刪除不安全的字符。在數據到達應用的存儲層之前,一定要過濾輸入數據。這是第一道防線。假如網站的評論表單接收html,默認情況下

訪客可以毫無阻攔地在評論中加入惡意的<script>標簽,如下標示:

<p>
    我的測試
</p>
<script>alert(123)</script>

  上面例子。如果不過濾這個評論,惡意代碼會存入數據庫,然后再網站的標記中渲染。

  HTML

  我們可以使用htmlentities或者htmlspecialchars函數來過濾html,把特殊字符轉換成對應的html實體。

  htmlentities這個函數轉換所有含有對應“html實體”的特殊字符,比如貨幣表示符號歐元英鎊等、版權符號等,htmlspecialchars 只是把某些特殊的字符轉義了, & " ' < >

  這2個函數比較傻,默認是不會轉義單引號的

$str='<a href="test.html">\'測試頁面\'</a><script>alert(213)</script>'; 

//並沒有轉義單引號
echo $str;
echo "<hr/>".PHP_EOL;
echo htmlentities($str);
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str);

  需要設置第2個參數 ENT_QUOTES,具體可以看php手冊

echo htmlentities($str,ENT_QUOTES,'UTF-8'); //單引號也轉義
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str,ENT_QUOTES,'UTF-8');//單引號也轉義

 以上例子並不能區別出htmlentities和htmlspecialchars ,下面換上一些特殊的字符,如歐元等。htmlentities將會對此轉義,htmlspecialchars卻不會

echo htmlentities('€ <>"').PHP_EOL;
echo "<hr/>".PHP_EOL;
echo htmlspecialchars('€ <>"').PHP_EOL; //€沒有轉義

結論:做一般表單提交的時候完全可以用strip_tags去除html標簽,如果涉及到富文本編輯器需要保留html標簽,可以用htmlspecialchars對提交數據進行過濾。

更詳細的總結參考:https://segmentfault.com/q/1010000004067521


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM