web-dev-qa-db-ja.com

DomベースのXSSは、最新のブラウザーで依然として有効なセキュリティ問題ですか?

DOMベースのXSSがどのように機能するかを理解しようとしています。 この投稿 から、IE11でそれを再現することができましたが、たとえばChromeおよびFirefoxは、少なくともこの正確な例に影響されません。

何が起こるのですかdocument.baseURIおよび類似のオブジェクトはエンコードされた文字列を返します。そのため、それをデコードするコードを明示的に記述したり、何かを悪用したりする方法がわからない場合、.

最近のブラウザーがまだ脆弱である他の例はありますか?ウェブ上のほとんどすべての例が同様の脆弱性を指摘しているため、私はなんとか見つけられませんでした。

追伸例の要点は、インジェクションでハッシュバングクエリを作成することです。

http://victim/displayHelp.php?title=FAQ#<script>alert('Hello')</script>
28

はい、DOMベースのXSSはまだ問題です。 URLエンコーディングが原因で悪用できない問題もありますが、URLエンコーディングが悪用されない状況がいくつかあります。

例の要点は、インジェクションでハッシュバングクエリを作成することです

これは1つの例ですが、DOMベースのXSSには all が含まれます。

データは、URL、DOM自体などのソースから取得できます。

ユーザー入力がlocation.searchから読み取られ、innerHTMLまたは.writeで処理される最も基本的な例は、値がURL-であるため、実際には最新のブラウザでは機能しませんエンコード。

ただし、location.searchとは異なるソースまたはinnerHTMLとは異なるシンクを持つDOMベースのXSSは引き続き機能し、実際のアプリケーションに存在します。

さまざまなシンクとソースの例の不完全なリストを以下に示します。

ソース:URL

ユーザー入力がURLから取得されるDOMベースのXSS脆弱性の例:

<html>
<body>
<script>
    url = new URLSearchParams(location.search);
    x = url.get('x');
    document.write(x);
</script>
</body>
</html>

攻撃:

http://example.com/test.html?x=<script>alert(1)</script>

出典:DOM

私の経験では、これは悪用可能なDOMベースのXSS問題の最も一般的なクラスです。

HTMLコードに挿入されるすべてのユーザー提供データを適切にHTMLエンコードするアプリケーションを想定してみましょう。

多くの場合、アプリケーションはユーザーから提供されたデータをDOMから読み取り、安全でない方法で再挿入します。例えば:

<html>
<body>
<input type="text" id="userinput" value="&quot;><img src=x onerror=alert(1)>">
<div id="output"></div>
<script>
    userinput = document.getElementById('userinput').value;
    output = document.getElementById('output');
    output.innerHTML = "Your input was: " + userinput;
</script>
</body>
</html>

シンク:評価

XSSを取得するために"または>が不要な場合があります。例は、evalに渡されるユーザー入力です。

<html>
<body>
<script>
    x = window.location.hash.substr(1);
    eval("var myvar = '" + x + "'");
</script>
</body>
</html>

攻撃:

http://example.com/test.html#';alert(1);x='

シンク:document.write

"または>を必要とせず、document.writeで機能する別の例:

<html>
<body>
<script>
    x = window.location.hash.substr(1);
    document.write("<input type='text' value='" + x + "'");
</script>
</body>
</html>
</body>
</html>

攻撃:

http://example.com/test.html#test'onmouseover='alert(1)
53
tim