2017-07-19 5 views
0

私のJavascriptコードは、信頼できない文字列変数をとり、それをDOMでレンダリングすることを目指しています。それは整形式HTML内の既知の点に挿入されます。また、文字列にHTML要素が含まれていない場合にのみ挿入されます。スクリプトの実行は第一の心配ですが、エクスプロイトに取り組むことができるあらゆる種類の注射が懸念されます。HTML/JSインジェクション攻撃で最も簡単なチェックは何ですか?

文字列が安全でないと思われる場合は、単にDOMにレンダリングできません。潜在的に安全でないことが判明した文字列を衛生的にすることや何かをする必要はありません。実のところ、私は図書館を避け、メンテナンスを必要としない死んだ簡単な小切手を好むでしょう。私はDOMにテキストノードを追加するという解決策も見てきましたが、私がやっていることではうまくいかないと言うでしょう。

私はテストは、「文字列が<を含まない」のような単純なものかもしれないと思う:

function isItSafe(text) { return text.indexOf('<') === -1; }

しかし、おそらくそれはナイーブです。特に、不正なHTMLに応答して特定のブラウザがどのように動作するかに依存するエクスプロイトがいくつかあります。 "<"を使用せずに注入エクスプロイトを作成できますか?もしそうなら、最小限の小切手が必要であると思いますか?

+1

正規表現を使用してください!私はこの答えはhttps://stackoverflow.com/a/20855840/6826071だと思います。 – DrunkDevKek

+0

アプローチが安全かどうかを知るには、何らかの方法が必要です。安全を確実にするために具体的に必要なものを探求するために、私の質問に答えようとしました。 –

答えて

2

短い答えは:常にユーザーの入力にregexを使用することです。 山括弧なしでXSS攻撃を行う方法はないと思います。

おそらくありますが、より洗練された正規表現を使用することをそこにライブラリが、ここで開始するには良いものだ。これは、文字列のプロトタイプにメソッドを追加します

:あなたは、ユーザーのを統合する

String.prototype.applyXSSprotection = function(){ 
    return this.replace(/</g, "&lt;").replace(/>/g, "&gt;"); 
}; 

いつでもDOMに入力するには、次のものを使用してください:

/*let's suppose the user input is stored in the variable user_input as a string*/ 
user_input = user_input.applyXSSprotection(); 
/*now use it*/ 
関連する問題