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

时间:2019-07-15 17:43:39

标签: ruby-on-rails ruby-on-rails-5

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

  

类的未定义方法content_security_policy?

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

那么,它的确切含义是什么?有什么帮助?

1 个答案:

答案 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,从而使攻击更加困难。