TP框架中有自帶的防止xss(跨站腳步攻擊)溯泣、sql注入瞬女,在 application/config.php 中有個配置選項:
框架默認(rèn)沒有設(shè)置任何過濾規(guī)則凤覆,你可以是配置文件中設(shè)置全局的過濾規(guī)則:
// 默認(rèn)全局過濾方法 用逗號分隔多個
'default_filter' => 'htmlspecialchars,addslashes,strip_tags',
htmlspecialchars:防XSS攻擊,尖括號等轉(zhuǎn)義過濾
addslashes:防SQL注入拆魏,在每個雙引號(")前添加反斜杠
strip_tags:剝?nèi)プ址械?HTML 標(biāo)簽
把這些參數(shù)加上后盯桦,每次請求后端的接口中慈俯,框架就會對請求的變量進行自動過濾了。
也可以在獲取變量的時候添加過濾方法拥峦,例如:
Request::instance()->get('name','','htmlspecialchars'); // 獲取get變量 并用htmlspecialchars函數(shù)過濾
Request::instance()->param('username','','strip_tags'); // 獲取param變量 并用strip_tags函數(shù)過濾
Request::instance()->post('name','','org\Filter::safeHtml'); // 獲取post變量 并用org\Filter類的safeHtml方法過濾
可以支持傳入多個過濾規(guī)則贴膘,例如:
Request::instance()->param('username','','strip_tags,strtolower'); // 獲取param變量 并依次調(diào)用strip_tags、strtolower函數(shù)過濾
如果當(dāng)前不需要進行任何過濾的話略号,可以使用(V5.0.3+版本) ps: 這個方法測試了下刑峡,好像沒有起作用,你們也可以試下
Request::instance()->get('name','',false); // 獲取get變量 并且不進行任何過濾 即使設(shè)置了全局過濾
如果有用到富文本編輯器或其他類似的提交html標(biāo)簽的變量玄柠,可以使用:
htmlspecialchars() 函數(shù)把預(yù)定義的字符轉(zhuǎn)換為 HTML 實體突梦。
預(yù)定義的字符是:
& (和號)成為 &
" (雙引號)成為 "
' (單引號)成為 '
< (小于)成為 <
> (大于)成為 >
htmlspecialchars_decode() 函數(shù)把預(yù)定義的 HTML 實體轉(zhuǎn)換為字符。
會被解碼的 HTML 實體是:
& 解碼成 & (和號)
" 解碼成 " (雙引號)
' 解碼成 ' (單引號)
< 解碼成 < (小于)
> 解碼成 > (大于)
htmlspecialchars_decode() 函數(shù)是 htmlspecialchars() 函數(shù)的反函數(shù)羽利。