在我的应用程序中,我有一些服务器变量:
{{# serverVars }}
<script>
window.serverVars = {{{ . }}};
</script>
{{/ serverVars }}
这用于将 window.serverVars.countryCode
设置为由服务器使用 geoIP 确定的国家/地区代码。
现在在 CSP 中,这被认为是不安全内联
,这通常是不好的。那么最好的方法是什么:
- 使用随机数很困难:每个请求的随机数都是唯一的,并且大多数 CSP 库(例如 Helmet)认为 CSP 策略是静态的
- 使用哈希很困难:每个请求的 serverVars 值都是唯一的,并且大多数 CSP 库(例如 Helmet )将 CSP 策略视为静态
script-src
的unsafe-inline
被认为是不安全的
使用 CSP 将动态服务器变量添加到客户端 JavaScript 的最佳方法是什么?
最佳答案
我见过一些人使用浏览器不会执行的带有 type
的 script
,然后从受信任的 JavaScript 中获取并解析这些内容。例如,在 HTML 中:
<script id="config" type="application/x-configuration">
{"environment": "production", ...}
</script>
然后在您的 JavaScript 文件中:
var config = JSON.parse(document.getElementById('config').textContent);
如果您愿意,也可以将其作为 data
属性,例如:
<!DOCTYPE html>
<html lang="en" data-config="{"environment": "production", ...}">
...
再次在 JavaScript 中获取它:
var config = JSON.parse(document.documentElement.dataset.config);
关于content-security-policy - 如何使用 CSP 在 JS 中包含服务器变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32168851/