我正在尝试将CSP添加到我的Web应用程序,我在索引页面中添加了以下元标记:
<meta http-equiv="Content-Security-Policy" content="img-src 'self' data:;default-src *;style-src 'self' http://* 'unsafe-inline';script-src 'self' http://* 'unsafe-inline' 'unsafe-eval';" />
还有以下我在IIS上的web.config文件:
<customHeaders>
<add name="Content-Security-Policy" value="default-src 'self' 'unsafe-inline' http://*.domain.com;
img-src 'self' http://*.domain.com data:" />
</customHeaders>
是否需要同时添加元标记和其他标头?还是其中之一就足够了?
元标记策略会覆盖自定义标头吗?
这个script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'
意味着我可以编写内联JavaScript并在代码中使用eval
函数吗?此规则是否会覆盖标头设置的策略? (据我所知,在标头中,我禁止使用内联JavaScript和eval
函数)
最后一个问题是,如果我使用这些设置,是否应该在HTML中使用ng-csp
或其他变体ng-csp="no-unsafe-eval"
?
答案 0 :(得分:2)
是否需要同时添加元标记和其他标头?还是其中之一就足够了?
一个就足够了。如果您可以让服务器在响应标头中发送策略,那更好。您也不需要在meta
元素中指定任何内容,这也没有任何好处。
元标记策略会覆盖自定义标头吗?
只有meta
策略更严格时,meta
策略才会覆盖标头策略。看到这个答案:
What is happening when I have two CSP (Content Security Policies) policies - header & meta?
…引用了CSP的一部分,内容为“在要执行的策略列表中添加其他策略只会进一步限制受保护资源的能力”。。
这
script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'
是否意味着我可以编写内联JavaScript并在代码中使用eval
函数?
如果您的标头还为script-src
指定了这些值,它将这样做。但是您的标头策略却没有。因此,无论指定何处,浏览器都会使用最严格的策略。
此规则是否覆盖标头设置的策略? (据我所知,在标头中,我禁止使用内联JavaScript和
eval
函数)
否,正如 What is happening when I have two CSP (Content Security Policies) policies - header & meta? 答案所解释的那样,您不能通过在其他地方指定不太严格的策略来覆盖严格的策略。
因此,最好在标题的一个位置(而不是meta
)中指定所有策略值。