一、跨域
1、当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.google.com),那么我们就可以认为它们是相同的域(协议,域名,端口都必须相同)。
2、跨域就指着协议,域名,端口不一致,出于安全考虑,跨域的资源之间是无法交互的(例如一般情况跨域的JavaScript无法交互,当然有很多解决跨域的方案)
二、导致跨域的原因:同源策略
跨域的出现是因为浏览器的同源策略的限制,出发点是为了安全起见
同源策略的方向一是针对接口的请求,二是针对Dom的查询。
1、没有同源策略限制的接口请求
我们一般用cookie来处理登录场景,目的是让服务端知道谁发出的这次请求。如果你请求了接口进行登录,服务端验证通过后会在响应头加入Set-Cookie字段,然后下次再发请求的时候,浏览器会自动将cookie附加在HTTP请求的头字段Cookie中,服务端就能知道这个用户已经登录过了。
假如我们在一个涉及到我们隐私的正规网站中访问,突然不知道从哪弹出一个链接,不管是有意还是无意,我们点开了这个莫名其妙的网址(恶意网站),由于没有同源策略的限制,它向我们正经的网址中发起了请求,由cookie验证我们可以知道“服务端验证通过后会在响应头加入Set-Cookie字段,然后下次再发请求的时候,浏览器会自动将cookie附加在HTTP请求的头字段Cookie中”,这样一来,这个恶意网站就相当于登录了我们的账号,有了我们的个人信息,这是很危险的,他们可以随意使用我们的个人信息,后果可想而知.....这种跨站请求伪造就是我们常说的CSRF攻击
看了这波CSRF攻击我在想,即使有了同源策略限制,但cookie是明文的,还不是一样能拿下来。于是我看了一些cookie相关的文章聊一聊 cookie、Cookie/Session的机制与安全,知道了服务端可以设置httpOnly,使得前端无法操作cookie,如果没有这样的设置,像XSS攻击就可以去获取到cookieWeb安全测试之XSS;设置secure,则保证在https的加密通信中传输以防截获。
2、没有同源策略限制的Dom查询
某天我们突然收到一条短信,说自己的某账号出现非法登录,需要紧急修改,慌乱之下我们匆匆点击去一顿修改(包含账号及密码的验证),殊不知我们这是在主动送人头【由于没有同源策略的限制,恶意网站是可以拿到别的正经网站的dom,即能获取到我们的账户信息】,被别人坑害了,还暗自庆幸自己机智.....
了解没有同源策略限制的危害后就知道还是有必要增加跨域限制的
三、处理跨域
1、情况描述
Web项目中调用一个与Web不同域名与端口的接口,出现跨域
2、原代码及结果
(1)Web项目的请求
(2)接口的内容
(3)访问结果:跨域限制
3、处理(在后台处理)
(1)在接口里增加以下代码:表示所有的域都可以访问
response.setHeader("Access-Control-Allow-Origin", "*");