2012-08-31 69 views
1

访问API资源可以通过它可以自动通过网络浏览器来发送,但不会发出跨域除非允许跨域访问所有API资源是否安全?

  1. 证书进行认证访问控制允许的凭据设置为“真”(如Cookie,HTTP基本/摘要式身份验证,SSL证书)。

  2. 必须由客户端手动设置(例如OAuth访问令牌)秘密标记,无论是在HTTP标头中还是作为URL中的查询参数。

考虑到这一点,在API中的所有资源上设置“Access-Control-Allow-Origin:*”总是安全的吗?

+0

本质上,问题是“如果一个API仅使用HTTP头中的OAuth进行身份验证,是否可以安全地在所有资源上设置”Access-Control-Allow-Origin:*“? –

+0

然后,一个必然的问题就是“只要没有发送凭据,为什么网络浏览器不允许跨域访问所有资源?” –

回答

0

如果攻击者在任何时候对他所控制的域执行JavaScript都可以获取数据或执行状态更改而不提供令牌,那么您就有漏洞。这次攻击与CSRF非常相似,只是它扩大了数据的过滤范围。

但就像CSRF一样,如果客户端必须使用每个请求的令牌进行身份验证,并且攻击者不知道此令牌,那么他将无法访问CORS API,并且会出现CSRF类攻击。

+0

假设没有凭据的唯一行为是读取公共数据(应该是这样),那意味着没有漏洞?如果只启用“Access-Control-Allow-Origin:*”,那么将无法跨域发送证书? –

+0

@Alf Eaton你可以在没有CORS的情况下发送数据,这就是CSRF攻击背后的全部想法。 CORS允许你读取数据,如果攻击者不知道密钥(而密钥不是cookie),那么他仍然不能读取数据。 – rook

+0

您可以发送没有CORS的数据,但不是没有凭证;只要保证证书不会自动发送,这意味着为所有资源启用CORS头文件是安全的。 –

相关问题