有没有办法设置 Content-Security-Policy header 说不要 运行 javascript 来自任何具有主机名的 URL
Is there a way to set a Content-Security-Policy header to say don't run javascript from any URL that has a hostname
我们的 Web 应用程序提供 javascript 个文件的页面和其他内容。我们正在通过安全扫描器,它推荐了 Content-Security-Policy header,这不是一件坏事。但是有一个丑陋的皱纹。我们通过“/js/...”链接为所有 javascript 提供服务,并且位于 reverse-proxy 服务器之后,可以通过多个路径加载。所有这些的结果是我们实际上并不知道服务器端我们自己的 URL。
所以只有当我可以说不允许主机名时,我才能放置 header。
如果我真的需要一个主机名,我可能会这样做,但我知道这是禁止的。
<HEAD>
<SCRIPT>
document.write('<META HTTP-EQUIV="Content-Security-Policy" ...>');
</SCRIPT>
<SCRIPT SRC="/js/public/require.js"></SCRIPT>
...
有几个地方我们从外部路径获取数据(不是 javascript);我想我只需要手动将 URL 添加到这些页面的列表中即可。
The consequence of all that is we don't actually know our own URL on the server side.
选项 1. URL 表示:
[scheme://] [host] [:port] [/path]
即使您使用像 <SCRIPT SRC="/js/public/require.js"></SCRIPT>
这样的相对 URL,浏览器也会遵循同源策略并使用来自父 window.
的 [scheme://] [host] [:port]
因此,您无论如何都有一个 host
(域名)。即使你使用 IP 地址作为 host
,这个 IP 变成了一个主机名(但是你失去了 https:
的能力)。
真正的 host
始终存在,并且知道服务器上的 path
对于 CSP 不是强制性的。
因此您可以使用 script-src 'self'
来表示自己的主机名,网络应用程序通过该主机名运行。或者,如果您希望仅允许来自 /js/
文件夹的脚本,您可以使用 script-src your_domain.com
甚至 script-src your_domain.com/js/
。
选项 2. 使用 'nonce-value'
:
使用 script-src 'nonce-base64value';
发布 CSP 并使用 base64value 作为脚本中的 nonce= 属性值:
<SCRIPT SRC="/js/public/require.js" nonce="base64value"></SCRIPT>
<SCRIPT nonce="base64value">alert('Hello');</SCRIPT>
我们的 Web 应用程序提供 javascript 个文件的页面和其他内容。我们正在通过安全扫描器,它推荐了 Content-Security-Policy header,这不是一件坏事。但是有一个丑陋的皱纹。我们通过“/js/...”链接为所有 javascript 提供服务,并且位于 reverse-proxy 服务器之后,可以通过多个路径加载。所有这些的结果是我们实际上并不知道服务器端我们自己的 URL。
所以只有当我可以说不允许主机名时,我才能放置 header。
如果我真的需要一个主机名,我可能会这样做,但我知道这是禁止的。
<HEAD>
<SCRIPT>
document.write('<META HTTP-EQUIV="Content-Security-Policy" ...>');
</SCRIPT>
<SCRIPT SRC="/js/public/require.js"></SCRIPT>
...
有几个地方我们从外部路径获取数据(不是 javascript);我想我只需要手动将 URL 添加到这些页面的列表中即可。
The consequence of all that is we don't actually know our own URL on the server side.
选项 1. URL 表示:
[scheme://] [host] [:port] [/path]
即使您使用像 <SCRIPT SRC="/js/public/require.js"></SCRIPT>
这样的相对 URL,浏览器也会遵循同源策略并使用来自父 window.
的 [scheme://] [host] [:port]
因此,您无论如何都有一个 host
(域名)。即使你使用 IP 地址作为 host
,这个 IP 变成了一个主机名(但是你失去了 https:
的能力)。
真正的 host
始终存在,并且知道服务器上的 path
对于 CSP 不是强制性的。
因此您可以使用 script-src 'self'
来表示自己的主机名,网络应用程序通过该主机名运行。或者,如果您希望仅允许来自 /js/
文件夹的脚本,您可以使用 script-src your_domain.com
甚至 script-src your_domain.com/js/
。
选项 2. 使用 'nonce-value'
:
使用 script-src 'nonce-base64value';
发布 CSP 并使用 base64value 作为脚本中的 nonce= 属性值:
<SCRIPT SRC="/js/public/require.js" nonce="base64value"></SCRIPT>
<SCRIPT nonce="base64value">alert('Hello');</SCRIPT>