我已经将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必须尽可能严格,以确保安全。