Http headers 有没有办法将内容安全策略头设置为don';t从任何具有主机名的URL运行javascript

Http headers 有没有办法将内容安全策略头设置为don';t从任何具有主机名的URL运行javascript,http-headers,content-security-policy,Http Headers,Content Security Policy,我们的web应用程序提供页面和javascript文件页面等服务。我们正在通过一个安全扫描程序,它推荐了一个内容安全策略头,这不是一件坏事。但是有一条难看的皱纹。我们通过“/js/…”链接提供所有javascript,并且位于反向代理服务器后面,可以通过多个路径加载。这一切的结果是,我们实际上不知道服务器端自己的URL 因此,只有当我可以说不允许使用主机名时,我才能放置标题 如果我真的需要一个主机名,我可能会这样做,但我知道这是verboten <HEAD> <SCRIPT&g

我们的web应用程序提供页面和javascript文件页面等服务。我们正在通过一个安全扫描程序,它推荐了一个内容安全策略头,这不是一件坏事。但是有一条难看的皱纹。我们通过“/js/…”链接提供所有javascript,并且位于反向代理服务器后面,可以通过多个路径加载。这一切的结果是,我们实际上不知道服务器端自己的URL

因此,只有当我可以说不允许使用主机名时,我才能放置标题

如果我真的需要一个主机名,我可能会这样做,但我知道这是verboten

<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,如
,浏览器也遵循相同的源策略,并使用
[scheme://][host][:port]
构成父窗口。
因此,您仍然拥有一个
主机
(域名)。即使您将IP地址用作
主机
,此IP也会成为主机名(但您失去了
https:
)的功能。
Real
host
始终显示,CSP不强制要求知道服务器上的
路径

因此,您可以使用
脚本src'self'
来表示自己的主机名,web应用程序通过该主机名进行操作。或者,如果您希望只允许使用
/js/
文件夹中的脚本,您可以使用
script src-your\u-domain.com
甚至
script-src-your\u-domain.com/js/

选择2。使用
'nonce-value'

使用脚本src'nonce-base64value'发布CSP并在脚本中使用base64value作为nonce=属性值:


alert('Hello')

很有趣。搜索内容安全提供商脚本src self发现了一个比我工作时更好的文档页面。“如果您希望只允许来自
/js/
文件夹的脚本,甚至可以
脚本src your_domain.com/js/
。”我认为这是不对的。CSP适用于方案和域,但不适用于路径。CSP2和CSP3规范允许使用。请看规则中的说明。此外,还支持文件名。