5

コンテンツ セキュリティ ポリシーを使用して、安全でないインライン コードを使用せずに Django Web アプリケーションを安全にしたいと考えています。しかし、ほとんどの JavaScript コードを外部ファイルに移動するのは簡単ですが、修正できないインライン コードのセグメントもあります。私は Django を使用しており、JavaScript に pqww したい Django テンプレートコンテキストにいくつかの変数があります。そのため、現在は単純にインライン JavaScript として出力しています。しかし、これは CSP のために機能しません。

<script type="text/javascript">
    /* <![CDATA[ */
    var documentURL = '{% filter escapejs %}{{ document.get_document_url }}{% endfilter %}';
    /* ]]> */
</script>
4

1 に答える 1

4

コメントを回答形式にして、少し追加するには...

これを行う最も簡単な方法は、属性セットを持つタグを生成することです。私はdjangoを知らないので、プレーンなhtmlのままにしておきます:

<input type="hidden" id="mything" value="<MY VALUE>">

複数の関連する値がある場合、それらを同じ要素にスローすることがあります。

<span class="hidden" data-attribute1="<VALUE1>" data-attribute2="<VALUE2>">
<!-- rename 'attributeN' to something meaningful obviously -->

いずれの場合も、JS で値を読み取るだけです (簡潔にするために jquery を使用)。

$('#mything').data("attribute1")

または、複雑なオブジェクトが必要な場合は、それを html エンティティ エスケープ データとしてスパンにスローします。

<span class="hidden" id="data-container">
  <your html-escaped JSON>
</span>

そして、次のように外部ファイルで読み取ります。

var myObject = JSON.parse($('#data-container').html());

これはhttps://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.233.1_-_HTML_escape_JSON_values_in_an_HTML_context_and_read_the_data_with_JSON.parseでも説明されています

于 2012-12-11T23:36:55.410 に答える