2016-03-27 2 views
-2

私は、次のPHP XSSフィルタ機能を持っている:このコードは本当にXSS証明ですか?

<?php 
function xssfilter($inp){ 
    $inp = html_entity_decode(urldecode($inp)); 
    $inp = preg_replace('/!/','',$inp); 
    if (preg_match('/script|on|xmlns|data/iu',$inp)){ 
     while(preg_match('/script|on|xmlns|data/iu',$inp)){ 
      $inp = preg_replace('/(script)|(on)|(xmlns)|(data)/iu','NO!',$inp); 
     } 
    } 
    return $inp; 
} 
?> 

明らかにあなたはここで、リモートスクリプトをアップロードすることができますが、あなたには、いくつかの方法で正規表現をバイパスすることができた場合、ここで私の質問はありますか?

+0

この質問は雑学の質問のように聞こえます。 –

+1

この機能を書いた人は、コンテンツのサニタイズ方法をよく理解していないようです。 URLのデコード、エンティティのデコード、感嘆符の置き換え、新しいキーワードの置き換え...彼らはちょうど問題を起こしたように見え、それが仕事をしてくれることを望みます。 –

答えて

0

いいえ、これには少なくとも1つの明らかな欠陥があります。あなたはそうのようなJavaScriptを含むリンクタグを挿入することができます。

<a href="&#x26;&#x23;&#x78;&#x36;&#x41;&#x3B;&#x26;&#x23;&#x78;&#x36;&#x31;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x36;&#x3B;&#x26;&#x23;&#x78;&#x36;&#x31;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x33;&#x3B;&#x26;&#x23;&#x78;&#x36;&#x33;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x32;&#x3B;&#x26;&#x23;&#x78;&#x36;&#x39;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x30;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x34;&#x3B;: alert('XSS');">Innocent Link</a> 

Chromeでこの攻撃を止める唯一のものは、それがXSS保護が組み込まれていた事実です。あなたのXSSの保護はそれを止めません。

関連する問題