2

Web サイトに JavaScript 関数がいくつかありますが、安全に使用できるかどうかわかりません。

ここに私のコードがあります:

// works like PHP's $_GET
function get(name){
    name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    regexS="[\\?&]"+name+"=([^&#]*)";
    regex=new RegExp(regexS);
    results=regex.exec(window.location.href);
    if(results==null)
        return '';
    return results[1];
}

// and here is my anti xss filter
var param = unescape(decodeURI(get("q")));
param = param.replace(/<(.*?)>/gi, "");
someElement.innerHTML = param;

このフィルターをバイパスすることは可能ですか?

4

2 に答える 2

3

アプリケーションに入る途中で XSS を見つけようとしないでください。プログラムは、作成したフィルタを回避できる可能性が高い方法でデータを内部的に変換する場合があります。

代わりに、アプリケーションから出る途中でデータの適切な HTML エンコーディングを適用してください。そうすれば、脆弱性を回避できます。

于 2013-02-09T05:00:17.833 に答える
0

いいえ、しかし、次のように最後の 2 行目で複数行モードをシミュレートする場合:

param = param.replace(/<([\s\S]*?)>/gi, "");

サンプルコードはそのままで安全です。サンプル コードの最大の欠点は、innerHTMLHTML をまったく追加したくない場合に使用することです。innerHTMLしたがって、 HTML を使用して除外しようとする代わりに、使用createTextNodeする必要があり、XSS について心配する必要はもうありません。したがって、必要に応じてget関数を保持し、次のようなパラメーター値を使用します (MDN から適応):

var param = unescape(decodeURI(get("q")));
var text  = document.createTextNode(param);
document.getElementById(someElement).appendChild(newtext);

jQuery を使用する場合は.text()、それ自体が を使用する関数を使用できますcreateTextNode

于 2013-02-08T23:00:25.550 に答える