0

私はOWASP XSS 防止チート シートを読んでいて、次のコードがアンチパターンと見なされていることに気付きました。

<script>
    var initData = <%= data.to_json %>; // Do NOT do this without encoding the data with one of the techniques listed below.
</script>

それが提案した代替案はこれでした:

<script id="init_data" type="application/json">
    <%= html_escape(data.to_json) %>
</script>

...次に、JavaScriptファイルで:

var dataElement = document.getElementById('init_data');
var jsonText = dataElement.textContent || dataElement.innerText  // unescapes the content of the span
var initData = JSON.parse(jsonText);

ただし、チート シートでは、元のコードの何が問題なのかについては触れていません。それは単なるアンチパターンですか、それとも XSS の実際の機会はありますか? PHPjson_encode()は、それを有効な JSON オブジェクトに変換するために必要なすべてのエスケープを正しく行う必要があるようです。JSON は、U+2028 および U をエスケープする限り機能する Javascript の十分に近いサブセットです+2029.

4

1 に答える 1

0

次の点を考慮してください。

<script>
var data = {"name":"</script><script>alert(1)//"}
</script>

これは有効な json ですが、ドキュメントが最初に HTML として解析されるため、json が壊れて alert(1) が実行されます。

于 2013-10-24T21:39:36.540 に答える