尝试使用 mod_cspnonce 模块在 apache httpd 服务器上托管的 Angular 应用程序中设置 CSP nonce。
能够构建以下策略,并且可以看到响应标头包含正确的随机数值。
Header set Content-Security-Policy "default-src 'self'; script-src http: https: 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' 'nonce-%{CSP_NONCE}e'"
但是,我无法使用 httpd.conf 在 index.html 中替换或设置相同的随机数。
index.html
<script src="https://../example1.js" nonce="CSP_NONCE"></script>
<script src="https://../example2.js" nonce="CSP_NONCE"></script>
<script src="https://../example3.js" nonce="CSP_NONCE"></script>
我尝试了几个选项来替换csplite
中提到的index.html中的CSP_NONCE关键字<Location />
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|CSP_NONCE|nonce-%{CSP_NONCE}e|i"
</Location>
<Directory "/">
AddOutputFilter Sed html
OutputSed "s/CSP_NONCE/nonce-%{CSP_NONCE}e/g"
</Directory>
这两个选项仅在响应中返回字符串文字,而不是预期的替换随机数值。
参考资料:
https://github.com/wyday/mod_cspnonce
任何建议都会有帮助!
我遇到了同样的问题,我参考了https://serverfault.com/questions/799139/how-to-use-env-in-mod-substitute作为解决方案。
我将当前的替代品重写为这个
<Location "/">
SetOutputFilter INFLATE;DEFLATE
AddOutputFilterByType SUBSTITUTE;INCLUDES text/html
Options Includes
Substitute "s/{SERVER-CSP-NONCE}/<!--#echo var=\"CSP_NONCE\" -->|ni"
</Location>
现在似乎正在发挥作用。希望有帮助!