php過濾輸入操作之htmlentities與htmlspecialchars用法分析
本文實(shí)例講述了php過濾輸入操作htmlentities與htmlspecialchars用法。分享給大家供大家參考,具體如下:
過濾輸入 (即來自所列數(shù)據(jù)源中的任何數(shù)據(jù))是指,轉(zhuǎn)義或刪除不安全的字符。在數(shù)據(jù)到達(dá)應(yīng)用的存儲(chǔ)層之前,一定要過濾輸入數(shù)據(jù)。這是第一道防線。假如網(wǎng)站的評(píng)論表單接收html,默認(rèn)情況下訪客可以毫無阻攔地在評(píng)論中加入惡意的<script>標(biāo)簽,如下標(biāo)示:
<p> 我的測(cè)試 </p> <script>alert(123)</script>
上面例子。如果不過濾這個(gè)評(píng)論,惡意代碼會(huì)存入數(shù)據(jù)庫,然后再網(wǎng)站的標(biāo)記中渲染。
HTML
我們可以使用htmlentities或者h(yuǎn)tmlspecialchars函數(shù)來過濾html,把特殊字符轉(zhuǎn)換成對(duì)應(yīng)的html實(shí)體。
htmlentities這個(gè)函數(shù)轉(zhuǎn)換所有含有對(duì)應(yīng)“html實(shí)體”的特殊字符,比如貨幣表示符號(hào)歐元英鎊等、版權(quán)符號(hào)等,htmlspecialchars 只是把某些特殊的字符轉(zhuǎn)義了, & " ' < >
這2個(gè)函數(shù)比較傻,默認(rèn)是不會(huì)轉(zhuǎn)義單引號(hào)的
$str='<a href="test.html" rel="external nofollow" >\'測(cè)試頁面\'</a><script>alert(213)</script>'; //并沒有轉(zhuǎn)義單引號(hào) echo $str; echo "<hr/>".PHP_EOL; echo htmlentities($str); echo "<hr/>".PHP_EOL; echo htmlspecialchars($str);
需要設(shè)置第2個(gè)參數(shù) ENT_QUOTES,具體可以看php手冊(cè)
echo htmlentities($str,ENT_QUOTES,'UTF-8'); //單引號(hào)也轉(zhuǎn)義 echo "<hr/>".PHP_EOL; echo htmlspecialchars($str,ENT_QUOTES,'UTF-8');//單引號(hào)也轉(zhuǎn)義
以上例子并不能區(qū)別出htmlentities和htmlspecialchars ,下面換上一些特殊的字符,如歐元等。htmlentities將會(huì)對(duì)此轉(zhuǎn)義,htmlspecialchars卻不會(huì)
echo htmlentities('€ <>"').PHP_EOL;
echo "<hr/>".PHP_EOL;
echo htmlspecialchars('€ <>"').PHP_EOL; //€沒有轉(zhuǎn)義
結(jié)論:做一般表單提交的時(shí)候完全可以用strip_tags去除html標(biāo)簽,如果涉及到富文本編輯器需要保留html標(biāo)簽,可以用htmlspecialchars對(duì)提交數(shù)據(jù)進(jìn)行過濾。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php程序設(shè)計(jì)安全教程》、《php安全過濾技巧總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- php htmlentities和htmlspecialchars 的區(qū)別
- php 去除html標(biāo)記--strip_tags與htmlspecialchars的區(qū)別詳解
- php5.4以上版本GBK編碼下htmlspecialchars輸出為空問題解決方法匯總
- PHP關(guān)于htmlspecialchars、strip_tags、addslashes的解釋
- php htmlspecialchars()與shtmlspecialchars()函數(shù)的深入分析
- php htmlspecialchars加強(qiáng)版
- PHP htmlspecialchars() 函數(shù)實(shí)例代碼及用法大全
- PHP htmlspecialchars_decode()函數(shù)用法講解
- PHP htmlspecialchars()函數(shù)用法與實(shí)例講解
- php過濾htmlspecialchars() 函數(shù)實(shí)現(xiàn)把預(yù)定義的字符轉(zhuǎn)換為 HTML 實(shí)體用法分析
相關(guān)文章
PHP使用PDO創(chuàng)建MySQL數(shù)據(jù)庫、表及插入多條數(shù)據(jù)操作示例
這篇文章主要介紹了PHP使用PDO創(chuàng)建MySQL數(shù)據(jù)庫、表及插入多條數(shù)據(jù)操作,結(jié)合實(shí)例形式總結(jié)分析了php基于pdo的mysql數(shù)據(jù)庫創(chuàng)建、數(shù)據(jù)表創(chuàng)建以及多條數(shù)據(jù)插入操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-05-05
PHP Beanstalkd消息隊(duì)列的安裝與使用方法實(shí)例詳解
這篇文章主要介紹了PHP Beanstalkd消息隊(duì)列的安裝與使用方法,結(jié)合實(shí)例形式詳細(xì)分析了PHP Beanstalkd消息隊(duì)列的基本功能、原理、安裝、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
自己在做項(xiàng)目過程中學(xué)到的PHP知識(shí)收集
以前沒學(xué)過PHP,最近剛好一個(gè)項(xiàng)目需要用到,我就決定一邊學(xué)一邊做PHP2012-08-08
簡(jiǎn)單的php寫入數(shù)據(jù)庫類代碼分享
簡(jiǎn)單的php寫入數(shù)據(jù)庫類代碼分享,學(xué)習(xí)php的朋友可以參考下。2011-07-07
Thinkphp中import的幾個(gè)用法詳細(xì)介紹
這篇文章主要介紹了Thinkphp中import的幾個(gè)用法,需要的朋友可以參考下2014-07-07
php實(shí)現(xiàn)異步數(shù)據(jù)調(diào)用的方法
這篇文章主要介紹了php實(shí)現(xiàn)異步數(shù)據(jù)調(diào)用的方法,分享了4種PHP異步執(zhí)行的常用方式,感興趣的小伙伴們可以參考一下2015-12-12
php中導(dǎo)出數(shù)據(jù)到excel時(shí)數(shù)字變?yōu)榭茖W(xué)計(jì)數(shù)的解決方法
導(dǎo)出數(shù)據(jù)到excel時(shí)數(shù)字變?yōu)榭茖W(xué)計(jì)數(shù)的解決方法,有需要的朋友可以參考下2013-02-02

