我正在开发一个JSON / REST web API,我特别希望第三方网站能够通过AJAX调用我的服务。因此,我的服务是发送着名的CORS头:
Access-Control-Allow-Origin: *
这允许第三方网站通过AJAX调用我的服务。所有罚款到目前为止。
但是,我的网络api的子部分是非公开的,并且需要身份验证(使用OAuth和access_token cookie的很标准的东西)。在我的网站的这一部分上启用CORS是否安全?
一方面,如果第三方网站可以有一个jax客户端也与我的服务的这一部分交互,这将是很酷。然而,首先有一个相同的起源政策的原因是,这可能是有风险的。您不希望以后访问的任何网站都能访问您的私人内容。
我担心的情况是,用户登录我的网络API,在网站上或通过他信任的网站,他忘记注销。这会允许他之后使用现有会话访问他的私人内容的其他网站吗?
所以我的问题:
>在非公开内容上启用CORS是否安全?
>如果CORS启用的服务器通过cookie设置session_token,那么该cookie是否会保存在CORS服务器或主网页服务器的域下?
在回答你的第二个问题(如果CORS启用服务器通过cookie …?设置一个session_token),cookie保存在CORS服务器的域下。主网页的JS代码不能访问cookie,即使通过document.cookie。 cookie仅在设置了.withCredentials属性时发送到服务器,即使这样,只有在服务器设置Access-Control-Allow-Credentials头时才会接受。
原文链接:https://www.f2er.com/ajax/160694.html你的第一个问题是有点更开放。这是相当安全的,但有办法规避事情。例如,攻击者可以使用DNS中毒技术使预检请求命中实际服务器,但将实际的CORS请求发送到流氓服务器。这里有一些关于CORS安全的资源:
> http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
> owasp.org CORS CheatSheet
最后,您的关注是让任何网站访问您的CORS数据。为了防止这种情况,您不应该使用Access-Control-Allow-Origin:*头。相反,您应该回显用户的Origin值。例如:
Access-Control-Allow-Origin: http://www.example.com
此标头只允许http://www.example.com存取回应资料。