http-headers - 有没有办法设置 Content-Security-Policy 标头来表示不要从任何具有主机名的 URL 运行 javascript
问题描述
我们的 Web 应用程序提供页面和 javascript 文件页面等等。我们正在通过一个安全扫描器,它推荐了一个 Content-Security-Policy 标头,这不是一件坏事。但是有一个难看的皱纹。我们通过'/js/...'链接提供我们所有的javascript,并且位于反向代理服务器后面,可以通过多个路径加载。所有这一切的结果是我们实际上并不知道服务器端我们自己的 URL。
因此,只有当我可以说不允许主机名时,我才能放置标题。
如果我真的需要一个主机名,我可能会做这样的事情,但我知道这是禁止的。
<HEAD>
<SCRIPT>
document.write('<META HTTP-EQUIV="Content-Security-Policy" ...>');
</SCRIPT>
<SCRIPT SRC="/js/public/require.js"></SCRIPT>
...
有几个地方我们从外部路径获取数据(不是 javascript);我想我只需要手动将 URL 添加到这些页面上的列表中。
解决方案
所有这一切的结果是我们实际上并不知道服务器端我们自己的 URL。
选项 1. URL 表示:
[scheme://] [host] [:port] [/path]
即使您使用相对 URL <SCRIPT SRC="/js/public/require.js"></SCRIPT>
,浏览器也会遵循同源策略并使用[scheme://] [host] [:port]
父窗口的形式。
因此,您无论如何都有一个host
(域名)。即使您使用 IP 地址作为host
,该 IP 也成为主机名(但您失去了 的能力https:
)。
Realhost
总是存在,并且path
在服务器上知道对于 CSP 来说不是强制性的。
因此,您可以使用script-src 'self'
来表示自己的主机名,Web 应用程序通过该主机名运行。或者,您可以使用script-src your_domain.com
,或者即使script-src your_domain.com/js/
您希望/js/
仅允许来自文件夹的脚本。
选项 2。使用'nonce-value'
:
发布 CSPscript-src 'nonce-base64value';
并将 base64value 用作脚本中的nonce=属性值:
<SCRIPT SRC="/js/public/require.js" nonce="base64value"></SCRIPT>
<SCRIPT nonce="base64value">alert('Hello');</SCRIPT>
推荐阅读
- google-sheets - 在特定字符之前提取数据
- python - 如何更改导出的破折号数据表的文件名?
- node.js - Google App Engine - 上传到存储桶后访问文件
- python - 带有 PostgreSQL IntegerRangeField 的 Django 保持顺序
- android - Flutter google_mobile_ads 在 Android 模拟器中工作但不在发布应用程序中
- python - 如何使用python控制手机?
- django - 如何排除 db Django 中的项目
- spring - BindingResult/Errors 没有在模型属性之后立即声明,但是没有问题,为什么?
- wpf - 如何使用用户控件中所有可用的列表视图宽度?
- c# - 对已知为原始类型的模板变量的值使用比较运算符