跨域

学习越久越觉得自己才疏学浅,今天才知道cors跨域和iframe跨域、referer、跨域请求伪造不是同一个东西(或者说cors不是用来完全解决csrf的)


所以跨域不跨域的问题一部分是服务端的问题,其实更多是浏览器问题,比如ie规定iframe里的网站属于第三方地址,不给加cookie(如果你的网站在别人网站的iframe里,你还需要登录,那你就苦了,因为不论怎样你的session都是加不上的,因为ie给你拦截了),解决方法是加入p3p,在response里加入,response.setHeader("P3P","CP=CAO PSA OUR")

不同浏览器的第三方 cookie 规则
  IE FIREFOX CHROME SAFARI OPERA
限制第三方coookie


jsonp最大的问题莫过于客户端传递js文件到服务端,然后又返回给了客户端执行,这几乎是所有问题的根源,“不法分子”几乎可以加入各种代码在js中,过滤总是会漏网(也许吧,你觉得都能搞定,很多人基于这个总是不愿意去解决根本问题)

jsonp:

1、只能发get,cors可以全发

2、不安全,js回调可用来注入攻击

3、可解决老式浏览器跨域(ie)


referer问题,A网站上挂B网站的请求,比如转账form表单提交,只能设置referer白名单,不在里面的统统拒绝访问,但这样效率低,而且有些网站,比如平台型的,你还不能去这样设置,因为你本来就是要比人跨域请求你的,这个白名单是动态的,所以最好还是在关机接口上设置,比如转账这个借口只能自己域名下的referer


注:js文件运行referer为空,但是浏览器会屏蔽这种跨域请求(这是cors管理范畴了),不用js,需要有referer,所以用js的时候还可以加入随机token,但是可以暴力破解


防止csrf:

1、验证referer

2、加上随机token


cors,其实是js跨域访问方案,包括简单跨域(head、get、post)请求和非简单跨域请求,区别是简单跨域马上发送请求,非简单需要先发送一个preflight,一个obtion方法,通过则发送,否则不发送,其实本质上是一个浏览器客户端解决方案,关于cors,这个网站不错:http://www.cnblogs.com/lailailai/p/4528092.html  http://www.ruanyifeng.com/blog/2016/04/cors.html

大部分程序员会把Access-Control-Allow-Origin设为*,因为开发的时候方便,但是当要带上cookie(withCredentials=true)的时候,这个值是不可以为*的,这个规定我认为非常好,要不然一点都不安全。

spring4.3(忘了是不是,反正老版本是有这个问题的)之前cors这部分是先处理请求然后在加上header等信息返回的,也就是说请求都处理了,然后才抛给浏览器,浏览器返现origin不对或怎样然后进一步屏蔽,但是要注意,请求已经处理了(没错,我发现的时候真的有些吃惊,spring居然这样),但是最新版本的spring已经改了,先检查origin,而不是不管怎样都执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值