【发布时间】:2014-10-15 06:26:44
【问题描述】:
我不确定 Access-Control-Allow-Origin 和 cookie 等方面的安全细节。
我试图生成一个允许从任何网站进行身份验证的 API。因此我需要设置:
Access-Control-Allow-Origin 到 * 和
Access-Control-Allow-Credentials 到 true
由于安全限制,这是不允许的。
但是,将Access-Control-Allow-Origin 响应标头设置为请求的Origin 标头的值会有什么问题?这是一个巨大的安全漏洞吗?!
例如(节点)
// CORS
app.all('*', function (req, res, next) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Headers', 'origin, content-type, accept');
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
if (req.method == 'OPTIONS') {
res.status(200).end();
}
next();
});
【问题讨论】:
-
这是一个安全限制,而不是组织级别的策略
-
它与可能的重复非常相似,但我想知道不进行配置查找并通过 ping 请求源来允许任何源的安全隐患
-
是的,现在我明白了——the CORS spec 不允许
Access-Control-Allow-Origin:*和Access-Control-Allow-Credentials:true:[allow-origin] 字符串“*”不能用于支持凭据。 -
我认为您会在security.stackexchange.com 得到更快/更好的响应。如果您对迁移感兴趣,请标记您自己的问题并使用自定义标记说明您的帖子作者并且您希望迁移该问题。我认为您的问题在这里完全是主题,但我个人怀疑它可能在 Security.SE 上做得更好。
-
好主意,这是解决问题的一种可能方法,我们不能一次允许多个页面,只是 *.例如,如果您还想在 localhost 上允许开发页面,则不能使用静态标头设置来实现。