San*_*ati 5 ruby-on-rails ruby-on-rails-5
我正在使用 Rails 5.2.3 并收到以下错误:
content_security_policy?类的未定义方法。
查看错误后,我发现它是由于csp_meta_tag布局 application.html.erb而产生的。
那么,它究竟意味着什么,它有什么帮助呢?
我的解释是:CSP 用于在您的应用程序中只允许可信脚本。因此,它用于保护您的应用程序免受未知脚本的侵害,这些脚本可能会被注入以损坏(或破解)您的应用程序。但它是如何做到的?
这是代码csp_meta_tag:
def csp_meta_tag
if content_security_policy?
tag("meta", name: "csp-nonce", content: content_security_policy_nonce)
end
end
Run Code Online (Sandbox Code Playgroud)
根据文档:
返回带有每个会话 nonce 值的元标记“csp-nonce”以允许内联标记。
但是什么是 nonce 以及它是如何使用的呢?
nonce 是一个随机字符串。它是由安全函数以加密方式制作的。脚本在用户浏览器中运行的唯一方式是脚本是否附加了随机数。例子:
<script nonce="AsnfAsf%28217%(*">
<!-- Some code here -->
<script>
Run Code Online (Sandbox Code Playgroud)
因此,想要在您的应用程序中注入脚本的攻击者将无法做到,因为他/她没有这个随机字符串。此外,每次加载浏览器页面时都会重新生成随机数,这使得攻击更加困难。