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> 我的測試 </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" >\'測試頁面\'</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實(shí)現(xiàn)的同步推薦操作API接口案例分析
這篇文章主要介紹了PHP實(shí)現(xiàn)的同步推薦操作API接口案例,結(jié)合具體實(shí)例形式分析了同步推薦操作具體的功能、接口、方法、參數(shù)及相關(guān)使用技巧,需要的朋友可以參考下2016-11-11PHP簡單獲取網(wǎng)站百度搜索和搜狗搜索收錄量的方法
這篇文章主要介紹了PHP簡單獲取網(wǎng)站百度搜索和搜狗搜索收錄量的方法,涉及php網(wǎng)頁文件的讀取及正則替換的相關(guān)操作技巧,需要的朋友可以參考下2016-08-08jQuery+PHP+ajax實(shí)現(xiàn)微博加載更多內(nèi)容列表功能
這篇文章主要介紹了jQuery+PHP+ajax實(shí)現(xiàn)微博加載更多內(nèi)容列表功能,對(duì)于微博開發(fā)來說非常實(shí)用,需要的朋友可以參考下2014-06-06Laravel5.5+ 使用API Resources快速輸出自定義JSON方法詳解
這篇文章主要介紹了Laravel5.5+ 使用API Resources快速輸出自定義JSON方法詳解,需要的朋友可以參考下2020-04-04php5.5使用PHPMailer-5.2發(fā)送郵件的完整步驟
PHPMailer已經(jīng)更新了很多版本了,本教程只針對(duì)老版本。下面這篇文章主要給大家介紹了關(guān)于php5.5使用PHPMailer-5.2發(fā)送郵件的完整步驟,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10PHP下escape解碼函數(shù)的實(shí)現(xiàn)方法
很多時(shí)候需要用到j(luò)s的escape函數(shù)來轉(zhuǎn)換中文字符,可是用js轉(zhuǎn)換后的字符怎么用php來轉(zhuǎn)換回來呢,下面我就找到了兩個(gè)很實(shí)用的函數(shù)。2010-08-08