【问题标题】:Helmet at nodejs project. Content Security Policy directivenodejs 项目的头盔。内容安全策略指令
【发布时间】:2023-02-23 17:48:04
【问题描述】:

我正在尝试添加到电子签名项目头盔中。该小部件通过 iframe 连接。

.use(helmet())

之后出现了这种错误

之后我尝试向 contentSecurityPolicy 添加指令:

.use(helmet())
.use(
    helmet.contentSecurityPolicy({
    directives: {
       ...helmet.contentSecurityPolicy.getDefaultDirectives(),
       "script-src": ["'self'", "'unsafe-inline'", "http://localhost:80/"],
       "script-src-attr": ["'none'", "'unsafe-inline'", "http://localhost:80/"],
       "connect-src": ["'self'", "http://localhost:80/"],
       },
   })
)

但是出现这样的错误,我没有找到解决方案,也许会有一些建议

我直接在HTML页面上使用脚本,看了资料说头盔不喜欢,需要把脚本放到模块里连接

<script type="module" src="..."></script>

我做到了,但错误仍然存​​在。

我尝试了很多选项,问题出现了,如果你完全禁用 contentSecurityPolicy,它有多安全?

我将不胜感激帮助解决这个问题

更新:我将脚本放入模块中,不再需要使用“script-src”和“script-src-attr”标头。将“connect-src”的分辨率更改为 localhost:3030,脚本的第一部分工作正常,但在尝试加载小部件后出现错误

之后,我添加了“frame-src”标题的分辨率

.use(
   helmet.contentSecurityPolicy({
      directives: {
          ...helmet.contentSecurityPolicy.getDefaultDirectives(),
          "connect-src": ["'self'", "http://localhost:3030/"],
          "frame-src": ["'self'", "https://eu.msn.com.ua/"],
       },
   })
)

标题没有更多的错误,但是 iframe 小部件打不开网站eu.msn.com.ua不允许你安装连接.没有头盔,小部件打开。在这种情况下可能是什么原因?

【问题讨论】:

    标签: node.js express content-security-policy helmet.js


    【解决方案1】:

    第一个违反 CSP 的是内联脚本。您允许“不安全内联”并允许脚本运行。

    第二个 CSP 违规是针对 connect-src 的。您已允许“self”和 http://localhost:80/,但连接正在尝试 http://localhost:3030,它被阻止,因为您似乎在“self”的默认端口上。

    在第三次尝试中,您遇到两个问题:

    1. 有一个内联事件处理程序(onload、onerror、onclick 等)。你在 CSP 级别 3 中允许这样做,但我建议改用事件侦听器重写它。
    2. 连接被拒绝,但这次是由于 CSP 指令“default-src 'self'”。请注意,此策略不同于上面定义 connect-src 时使用的策略。

    【讨论】:

    • 谢谢,这件事变得更容易理解了,我做了更新,你能告诉我吗?
    猜你喜欢
    • 2021-01-12
    • 2015-10-16
    • 2018-02-14
    • 1970-01-01
    • 2017-11-14
    • 2015-01-24
    • 1970-01-01
    • 2018-12-25
    • 2014-06-06
    相关资源
    最近更新 更多