我正在使用Rails 5.2.3,并遇到以下错误:
类的未定义方法
content_security_policy?
。
查看错误后,我发现它是由于布局application.html.erb中的csp_meta_tag
而产生的。
那么,它的确切含义是什么?有什么帮助?
答案 0 :(得分:0)
我的解释是:CSP用于在您的应用程序中仅允许使用可信任的脚本。因此,它用于保护您的应用程序免受未知脚本的攻击,这些脚本可能会注入来破坏(或入侵)您的应用程序。但是它是怎么做到的?
这是csp_meta_tag
的代码:
def csp_meta_tag
if content_security_policy?
tag("meta", name: "csp-nonce", content: content_security_policy_nonce)
end
end
根据文档:
返回元标记“ csp-nonce”,其具有每次会话的nonce值,用于 允许内嵌标签。
但是什么是nounce以及如何使用?
nounce是随机字符串。它是通过安全功能加密制成的。脚本在用户浏览器中运行的唯一方法是,如果脚本附加了nounce。 示例:
<script nounce="AsnfAsf%28217%(*">
<!-- Some code here -->
<script>
因此,任何想要在您的应用中注入脚本的攻击者都将无法执行此操作,因为他/她没有此随机字符串。此外,每次加载浏览器页面时都会重新生成nounce,从而使攻击更加困难。