0

重複の可能性:
PHP サイトで xss 攻撃を回避するためのベスト プラクティスは何ですか

PHP ボードを持っていますが、XSS セキュリティ リークが含まれています。

IE6 の URL アドレス フィールドに次の XSS を挿入すると、

http://x.x.x.x/xe/?mid=notice&category='"--></style></script><script>alert(0x000640)</script>'"--></style></script><script>alert(0x000640)</script>( XSSコードは こちら)

ブラウザは 1600 の警告メッセージを表示します (上記のコードをスクリプトとして変換します)

XSSを防ぐために、次のコードを挿入しました(if(preg_match('/"/',$target)) return true;

function _isHackedSrc($src) {  
    if(!$src) return false;  
    if($src) {  
     $target = trim($src);  
     if(preg_match('/(\s|(\&\#)|(script:))/i', $target)) return true;  
     if(preg_match('/data:/i', $target)) return true;  

        $url_info = parse_url($src);  
        $query = $url_info['query'];  
     if(!trim($query)) return false;  
     $query = str_replace("&amp;","&",$query);  
        $queries = explode('&', $query);  
        $cnt = count($queries);  
        for($i=0;$i<$cnt;$i++) {  
            $tmp_str = strtolower(trim($queries[$i]));  
            $pos = strpos($tmp_str,'=');  
            if($pos === false) continue;  
            $key = strtolower(trim(substr($tmp_str, 0, $pos)));      
            $val = strtolower(trim(substr($tmp_str,$pos+1)));  
            if( ($key=='module'&&$val=='admin') || ($key=='act'&&preg_match('/admin/i',$val)) ) return true;  
        }
    }
    return false;
}

しかし、それは機能しません。私を助けてください

4

2 に答える 2

1

悪意のあるものがないか入力をチェックしようとしないでください - それはあなたが常に失う戦いです.

代わりに、入力を適切にエスケープする必要があります。HTML の場合、適切な関数はhtmlspecialchars().

于 2012-09-07T11:03:17.743 に答える
-4

これを試して:

function _isHackedSrc($src) {  
    $src=trim(strip_tags(addslashes($src))); 
    ....
}

詳細: http://r00tsecurity.org/forums/topic/9924-workaround-strip-tags-and-addslashes-in-the-xss/

于 2012-09-07T11:02:59.680 に答える