2013-10-30 10 views
5

私は自分のUI(JavaベースのWebアプリケーション用)にユーザーが任意の値を入力できるHTMLテキストエリアを持っています。保存されると、ブラウザのテキストエリア(無効になっている)に表示されます。スクリプトがHTMLテキストエリアに表示されている場合、XSS攻撃は可能ですか?

ユーザがテキストエリアにフリーテキストとしてスクリプトを入力した場合、スクリプトとして実行されます(たとえ値がテキスト/テキストではなくテキストエリアに表示されていても)。

+0

あなたのコードを見てみましょう。 –

答えて

4

これは、textareaの値の設定方法によって異なります。 HTMLコードでは、textareaの内容は要素内のテキストです。

私は、これは内部のスクリプト(保存)し、空の1と2つのtextareaの要素を作成しますtextarea

<div><textarea id="e1"></textarea></div> 
<div><textarea id="e2"></textarea></div> 
<div id="e3"/> 

var dangerous = '<scri' + 'pt>alert("Danger!");</scri' + 'pt>'; 
document.getElementById('e1').value = dangerous; 

document.getElementById('e2').innerHTML = dangerous; 

dangerous = '</textarea>' + dangerous; 
var content = '<textarea>' + dangerous + '</textarea>'; 
document.getElementById('e3').innerHTML = content; 

console.log('Done.'); 

の内容を変更するにはJSFiddle to demonstrateさまざまな方法を作成しました。

最後のテストでは、入力内のtextareaを閉じて、スクリプトを追加します。 興味深いことに、この場合はinnerHTMLを設定しても安全です。It doesn't execute scripts inserted in this way

JavaScriptで行う限り、あなたはかなり安全です。しかし、通常、サーバー上のページのDOMをレンダリングして、あなたはあなたが適切のでtextareaの内容をエスケープすることを確認する必要があります。

String unfilteredInput = "</textarea><script>alert(\"Danger!\");</script>"; 

out.write("<textarea>"); 
out.write(content); 
out.write("</textarea>"); 

スクリプトを実行します。

注:私もdocument.write()を実証しようとしましたが、これはJSFiddleでは許可されていません。 document.write()は同じ攻撃に対して脆弱だと私は確信しています。

+1

+1はい、 'document.write()'も脆弱であるということは間違いありませんが、サーバー側とクライアント側のどちらが設定されているかによって異なります。ここでの簡単な例:https://dl.dropboxusercontent.com/u/1075151/dwrite.htm(Chromeで動作) – SilverlightFox

関連する問題