剛說到XSS攻擊..
我記得我之前做一個項目.就給檢測出存在XSS攻擊。
開始我沒有過濾提交的內容。
後來foreach 迴圈過濾每一個變數$_GET...$_POST...,發現不行。
然後只好寫了個函數 直接檢測 $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"] 判斷直接 exit...
不知道大家都是怎麼處理這個問題的...
------解決方案--------------------
htmlspecialchars過濾
------解決方案--------------------
htmlspecialchars
------解決方案--------------------
探討
怎麼過濾 過濾 $_GET所有變數 ? 這樣沒用...我試過了.
引用:
htmlspecialchars過濾
------解決方案--------------------
PHP code
"dsa<>");foreach($array as &$value){ $value = htmlspecialchars($value);}var_dump($array);array(1) { ["hello"]=> &string(11) "dsa<>"}
------解決方案--------------------
探討
你用
foreach($_GET as &$value){
$value=htmlspecialchars($value);}
這樣來過濾?
引用:
引用:
怎麼過濾 過濾 $_GET所有變數 ? 這樣沒用...我試過了.
引用:
htmlspecialchars過濾
沒用是什……
------解決方案--------------------
給你這三個函數,你根據需求稍加修改就好了,以後要擷取內容的時候不管是get還是post傳值都用這樣的方法來擷取:
$變數名=Toget('參數名或表單內的項目名');
PHP code
//函數:擷取資料//參數:表單名,是否需要轉譯Function Toget($__k,$Slash=True){ IF($__k==""){Return False;} IF(Array_key_exists($__k,$_REQUEST)){ $Value=IsSet($_POST["".$__k.""])?$_POST["".$__k.""]:$_GET["".$__k.""]; }Else{ Return False; } IF(Is_array($Value)){ $Value=Array_Filter($Value,'_nul'); }Else{ $Value=Trim($Value); IF($Value==""){Return False;} } IF($Slash){ $Value=Addlash($Value); } //反饋結果 IF(Is_array($Value)){Return $Value;} IF($Value=="" Or !Isset($Value)){ Return False; }Else{ Return $Value; }}function Addlash($Str){ !Defined('MAGIC_QUOTES_GPC') && Define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()); IF(!MAGIC_QUOTES_GPC){ IF(Is_array($Str)){ $keys=array_keys($Str); Foreach($keys as $key){ $val=$Str[$key];unset($Str[$key]); $Str[addslashes($key)]=Addlash($val); } }Else{ $Str=addslashes($Str); } } Return $Str;}//清理數組中的空值//用法:Print_r (Array_Filter($Arr,'_nul'));Function _nul($param){ Return ($param!="") ? True : False;}
------解決方案--------------------
這個得mark一下,繼續~
------解決方案--------------------
XSS又叫CSS (Cross Site Script) ,跨站指令碼攻擊。它指的是惡意攻擊者往Web頁面裡插入惡意指令碼代碼,當使用者瀏覽該頁之時,嵌入其中Web裡面的指令碼代碼會被執行,從而達到惡意攻擊使用者的特殊目的。XSS屬於被動式的攻擊,因為其被動且不好利用,所以許多人常忽略其危害性。
伺服器端指令碼防止 XSS 的唯一手段是檢查傳入的資料中是否有 script 標記
當然,攻擊者還有 n 多的手段去直接在你的頁面中嵌入惡意代碼。這就不是伺服器端指令碼能解決的問題了
簡單的用 htmlspecialchars 處理一下,只適合於其後只將傳入的資料作為字串顯示的場合。
由於
對於 #7 的 顯然使用的檢測演算法不是最大匹配演算法,而是簡單的包含演算法
雖無大錯,但誤判率升高。寧可錯殺三千,不可放過一個
------解決方案--------------------
探討
引用:
你用
foreach($_GET as &$value){
$value=htmlspecialchars($value);}
這樣來過濾?