我是在为自己制造CSP问题吗



我已经将node.js/express项目设置为使用存储在S3中的<img>。我在引用它们时收到以下错误消息:.....because it violates the following Content Security Policy directive: "img-src 'self' data:".

所以我使用下面的代码来更改CSP,因为我在这里找到的<meta>标签都没有解决我的错误。我只是想确保这不会造成安全问题,因为我对CSP 知之甚少

app.get("/", (req, res) => {
res.set("Content-Security-Policy", "default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'")
})

您的CSP完全不安全,因为它没有任何限制。

脚本
script-src http://* 'unsafe-inline' 'unsafe-eval'允许来自任何来源的外部脚本,允许内联脚本和eval函数。

相反,http://*应该为脚本加载指定允许源的白名单,例如:

script-src 'unsafe-inline' 'self' stackpath.bootstrapcdn.com tagmanager.google.com ajax.googleapis.com/ajax/libs/jquery/ googletagmanager.com https://connect.facebook.net;

只有当某些脚本使用eval((/Function((/setInterval((/setTimeout((函数时,才需要'unsafe-eval'

尝试使用"nonce value"令牌来避免'unsafe-inline'

*同样适用于style-src

images
如果从Amazon S3加载图像,则可以在img-src中指定bucket的域名,如img-src 'self' https://bucketname.s3.Region.amazonaws.com
您可以完全打开图像img-src *的所有源,但仅限于图像,而不限于脚本、样式、iframe等。img-src中的data:仅当您使用数据时才需要:-像<img src='data:image/gif;base64,...'>这样的URL或像background-url(data:image/jpeg;base64,...)这样的CSS紧缩。

默认src
好的做法是default-src 'self';-所有未指定的回退指令仅限于自域。

CSP必须尽可能严格,以确保安全。

最新更新