【发布时间】:2012-10-29 15:42:52
【问题描述】:
我想使用内容安全策略并使我的 Django Web 应用程序安全,没有任何不安全的内联代码。但是,虽然将大部分 JavaScript 代码移动到外部文件很容易,但我也有一段我不知道修复的内联代码。我正在使用 Django,并且我在 Django 模板上下文中有一些变量,我想将其 pqww 转换为 JavaScript。所以目前我只是将它作为内联 JavaScript 输出。但由于 CSP,这不起作用。
<script type="text/javascript">
/* <![CDATA[ */
var documentURL = '{% filter escapejs %}{{ document.get_document_url }}{% endfilter %}';
/* ]]> */
</script>
【问题讨论】:
-
您可以将该值输出到隐藏字段(并通过 JavaScript 读取)
-
更复杂的数据类型呢?例如,很容易将 dict 输出为 JSON,而 JavaScript 将其读取为对象。
-
嗯,“简单”是一个相对术语,但是您可以做到。我不止一次使用过这种方法。
-
最后我决定在一个空的div上使用
data-属性。 -
另一种解决方案是使用
nonce-adding 中间件将nonce添加到您的上下文中,并将相同的nonce添加到您的CSP 标头中。使用此方法,您可以一举将所有内联脚本(和 css)转换为与 CSP 兼容(或至少一个简单的查找和替换以将{{ nonce }}添加到所有内联脚本)。
标签: javascript django content-security-policy