Wordpress 内容安全策略阻止外部 Mailchimp 事件处理程序

问题描述 投票:0回答:1

我已经设置了我的 CPS 并使用随机生成的随机数将我的所有脚本列入白名单。当前的 CSP 似乎适用于其他脚本,但它会阻止嵌入的 mailchimp 电子邮件订阅事件处理程序。 这是我收到的控制台错误消息:(仅报告策略)页面的设置将阻止执行事件处理程序(script-src-attr),因为它违反了以下指令:“script-src 'self''随机数-022e6ecce789b043b660daaaafa8814f' https://connect.facebook.net/en_US/fbevents.js https://www.googletagmanager.com/gtag/ https://s3.amazonaws.com/downloads.mailchimp.com/js/ mc-validate.js https://connect.facebook.net/”

被阻止的代码位置位于缩小后的 mailchimp mc-validate.js 内部

我应该使用什么指令来允许此 url 中的所有 js 在我的服务器上执行,而不使用“不安全内联”?

我尝试将“strict-dynamic”添加到 script-src 中,并使用随机生成的随机数将所有脚本列入白名单,但 mailchimp 事件处理程序仍然被阻止。到目前为止唯一有效的选择是将 script-src-attr 指令设置为“unsafe-inline”,我认为这不是一个安全的选择。

php jquery content-security-policy mailchimp
1个回答
0
投票

您在 Mailchimp 的

mc-validate.js
中遇到的问题与内容安全策略 (CSP) 与内联事件处理程序交互的方式有关。该错误消息表明
script-src-attr
指令正在阻止事件处理程序,这通常在使用内联 JavaScript(如 HTML 属性内的事件处理程序)时发生。

以下是解决方案的细分:

  1. 为什么需要

    unsafe-inline
    :脚本mc-validate.js
    可能包含内联事件处理程序(例如,
    onclick
    onsubmit
    等),并且CSP的
    script-src-attr
    默认情况下会阻止内联事件处理程序。 
    unsafe-inline
     关键字在 
    script-src-attr
     下使用时,允许内联事件处理程序,但这确实不安全,通常不鼓励这样做。

  2. 没有unsafe-inline

    的解决方案:
    由于 unsafe-inline
     过于宽松,有一种更好的方法可以允许外部脚本运行而无需求助于它:

    • 在外部脚本中使用随机数:这已经是您使用 nonce-022e6ecce789b043b660daaaafa8814f
       采取的步骤。然而,外部脚本中事件处理程序基于随机数的安全性通常比较棘手,因为内联事件处理程序有时会以需要特殊处理的方式嵌入到 HTML 或外部脚本中。
  3. 添加strict-dynamic

    
    

      您已经尝试添加
    • strict-dynamic
      ,理论上,它应该与 
      nonce
       一起工作,以便在通过可信源动态加载脚本时允许执行脚本。但是,由于 
      strict-dynamic
       仅适用于通过 
      src
       属性加载的外部脚本,而不适用于内联事件处理程序,因此它无法直接解决脚本内事件处理程序的问题。
  4. 建议:要允许 mc-validate.js

     脚本及其关联的事件处理程序在不使用 
    unsafe-inline
     的情况下执行,请按照以下步骤操作:

    • 确保所有外部脚本(包括 Mailchimp 的)都经过随机数批准:您应该确保 mc-validate.js

       包含在正确应用的随机数中,如下所示:

      <script src="https://s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js" nonce="022e6ecce789b043b660daaaafa8814f"></script>
      
      
    • script-src

      script-src-attr
       与随机数一起使用
      :像这样设置 CSP 标头:

      Content-Security-Policy: script-src 'self' 'nonce-022e6ecce789b043b660daaaafa8814f' https://s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js; script-src-attr 'nonce-022e6ecce789b043b660daaaafa8814f';
      这样,

      mc-validate.js

      内部的内联脚本事件处理程序就可以安全地执行。

    • 尝试谨慎使用unsafe-eval

      :这对于某些外部库可能是必要的(尽管存在安全风险),但如果可能的话请避免使用。这看起来像:
      

      Content-Security-Policy: script-src 'self' 'nonce-022e6ecce789b043b660daaaafa8814f' https://s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js 'unsafe-eval';
      请谨慎使用 

      unsafe-eval

      ,因为它会引入漏洞,但有时某些动态生成代码的库(如 
      eval
      )需要它。

  5. 测试:应用这些更改后,首先在开发环境中测试您的站点,以确保 Mailchimp 表单按预期工作并且不会发生 CSP 违规。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.