Rails 5.2.3 中的 csp_meta_tag 是什么?它是如何工作的?

San*_*ati 5 ruby-on-rails ruby-on-rails-5

我正在使用 Rails 5.2.3 并收到以下错误:

content_security_policy?类的未定义方法。

查看错误后,我发现它是由于csp_meta_tag布局 application.html.erb而产生的。

那么,它究竟意味着什么,它有什么帮助呢?

B-M*_*B-M 8

我的解释是: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)

因此,想要在您的应用程序中注入脚本的攻击者将无法做到,因为他/她没有这个随机字符串。此外,每次加载浏览器页面时都会重新生成随机数,这使得攻击更加困难。

  • 但是,攻击者是否能够通过运行脚本来获取“nonce”值,然后用“nonce”值注入“script”标签来克服这个问题? (2认同)
  • @RamyTamer 攻击者不需要知道“nonce”值来运行检测该值并将其注入“script”的脚本吗 (2认同)