CORS(Cross Origin Resource Sharing),跨域资源共享,它允许浏览器跨域发出XMLHttpRequest请求,从而克服AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持,相比JSONP更加复杂,但是一般目前的浏览器都是支持的,服务器只需要进行相应配置,其通信过程都是浏览器自动完成,对于开发人员来说,跟写AJAX的代码没有区别,只是会在发送跨域请求时在HTTP请求头中添加一些字段来验证,关键字段如下:1、Access-Control-Allow-Origin:指定哪些域可以访问域资源。例如,如果requester.com想要访问provider.com的资源,那么开发人员可以使用此标头安全地授予requester.com对provider.com资源的访问权限。
2、Access-Control-Allow-Credentials:指定浏览器是否将使用请求发送COOKIE。仅当allow-credentials标头设置为true时,才会发送COOKIE。
3、Access-Control-Allow-Methods:指定可以使用哪些HTTP请求方法(GET,PUT,DELETE等)来访问资源。此标头允许开发人员通过在requester.com请求访问provider.com的资源时,指定哪些方法有效来进一步增强安全性。
CORS实现流程
1、服务器配置支持CORS,默认认可所有域都可以访问
2、浏览器客户端把所在的域填充到Origin发送跨域请求
3、服务器根据资源权限配置,在响应头中添加ccess-Control-Allow-Origin Header,返回结果
4、浏览器比较服务器返回的Access-Control-Allow-Origin Header和请求域的Origin,如果当前域获得授权,则将结果返回给页面
那么如果服务端的cors配置错误,就会导致任意请求域名都能通过cors跨域获取信息,造成用户信息的泄露。
CORS漏洞攻击防护
1、正确配置跨域请求
如果Web资源包含敏感信息,则应在Access-Control-Allow-Origin标头中正确指定来源。
2、只允许信任的网站
看起来似乎很明显,但是Access-Control-Allow-Origin中指定的来源只能是受信任的站点。特别是,使用通配符来表示允许的跨域请求的来源而不进行验证很容易被利用,应该避免。
3、严格校验Origin头,避免出现权限泄露
4、HTTPS网站不要信任HTTP域
JSONP是一种跨域请求资源的解决方案,JSONP可以绕过AJAX遵循的同源策略。
更容易理解的解释就是:利用"script标签可以跨域请求,并且把返回的结果当作js来执行"的特点来获取第三方的资源,那么如果这个jsonp请求返回的信息包含敏感个人信息,并且没有进行验证处理的话,就会造成信息泄露和被劫持。
JSONP劫持防护
1、限制来源refer;
2、按照JSON格式标准输出(设置Content-Type : application/json; charset=utf-8),预防?callback=<script>alert(/xss/)</script>形式的xss;
3、过滤 callback 函数名以及 JSON 数据输出,预防 xss。
网友回复