使用Angular4设置content-security-policy时出错

时间:2018-03-12 11:22:36

标签: angular content-security-policy

使用Angular4设置<!doctype html> <html lang="en"> <head> <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src 'self' http://localhost:4200 'unsafe-inline' 'unsafe-eval';"> <meta charset="utf-8"> <title>Myapp</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="favicon.ico"> </head> <body> <app-root></app-root> </body> </html> 时出现以下错误。

错误:

  

拒绝连接   &#39; WS://本地主机:4200 / sockjs节点/ 812 / lxo2oeas /网页套接字&#39;因为它   违反了以下内容安全策略指令:&#34; default-src   &#39;自&#39; &#39;不安全-EVAL&#39;&#34 ;.请注意,&#39; connect-src&#39;未明确设定,   所以&#39; default-src&#39;被用作后备。

     

未捕获的TypeError:event.data.indexOf不是receiveMessage的函数(out.js:4)

这是我的代码:

content-security-policy

在这里,我需要设置{{1}}但是会​​收到这些错误。

2 个答案:

答案 0 :(得分:2)

您需要明确指出允许使用ws:源表达式。

所以要么改变你的meta元素,要么:

<meta http-equiv="Content-Security-Policy" 
  content="default-src 'self' 'unsafe-eval';
  style-src 'self' 'unsafe-inline';
  script-src 'self' http://localhost:4200 'unsafe-inline' 'unsafe-eval';
  connect-src ws:">

...也就是说,添加一个带有connect-src源表达式的ws:指令。

或者这样做:

<meta http-equiv="Content-Security-Policy" 
  content="default-src 'self' 'unsafe-eval' ws:;
  style-src 'self' 'unsafe-inline';
  script-src 'self' http://localhost:4200 'unsafe-inline' 'unsafe-eval';">

...也就是说,将ws:源表达式添加到现有的default-src指令中。

答案 1 :(得分:0)

我在 WildFly Server (以前是JBoss)中部署的 Angular 9.1.12 遇到了相同的问题。起初,我认为问题出在带有index.html标签(<meta>)的<meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'self' 'unsafe-inline';'">中,但实际上错误是在 WildFly 服务器中,特别是在 response中-{header standalone.xml中设置。

standalone.xml

            <filters>
                <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
                <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
                **Here=>** <response-header name="Content-Security-Policy" header-name="Content-Security-Policy" header-value="default-src 'self'; style-src 'self' 'unsafe-inline'"/>
                <response-header name="x-frame-options" header-name="X-Frame-Options" header-value="SAMEORIGIN"/>
                <response-header name="x-xss-protection" header-name="X-XSS-Protection" header-value="1; mode=block"/>
                <response-header name="x-content-type-options" header-name="X-Content-Type-Options" header-value="nosniff"/>
                <response-header name="strict-transport-security" header-name="Strict-Transport-Security" header-value="max-age=31536000; includeSubDomains;"/>
                <response-header name="my-custom-header" header-name="my-custom-header" header-value="my-custom-value"/>
            </filters>

然后使用位于{em> wildfly 的jboss-cli文件夹中的bin重新启动 WildFly 服务器:

./jboss-cli.sh --connect command=:reload