跨域,安全

65 阅读2分钟

跨域

定义

指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。 同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;

产生原因

同源策略(Same Orgin Policy)是一种约定,它是浏览器核心也最基本的安全功能,它会阻止一个域的js脚本和另外一个域的内容进行交互,如果缺少了同源策略,浏览器很容易受到XSSCSFR等攻击   
所谓同源(即在同一个域)就是两个页面具有相同的协议(protocol)、主机(host)和端口号(port)。

非同源限制

无法读取非同源网页的cookie、localstorage等
无法接触非同源网页的DOM和js对象
无法向非同源地址发送Ajax请求

解决办法

Nginx反向代理

正向代理就是

a-->b访问不了,可以找个中间的服务器c, 先访问c再从c到b,类似曲线救国。
明确访问的目的地,但是用户不知道中间的代理服务器。(忽略中间服务器)

反向代理

a明确访问c代理服务器,但是不知道c的内容从哪里来,c反向从别的地方拿来数据。(忽略的是目标地址)

A访问B,但是A通过一个代理服务器访问B,这样B就不知道A的IP信息。 反向代理就是A通过访问代理服务器,然后代理服务器从其他地方拿信息

Jsonp

利用script没有限制同源
当我们插入一个 <script src="xxx.com"> 标签的时候,会发一个获取 xxx.com 的 GET 请求,而这个 GET 请求又不存在“跨域”限制,通过这样的方法就能解决跨域的问题了。
用户传一个callback函数名字给服务器,然后服务器会用这个callback函数包裹返回的数据,客户端接收后做出相应的响应。
  
jsonp兼容性强,尤其是IE10之前的,但是只支持GET方法。

CORS

解决Ajax只能同源访问,浏览器发现Ajax跨域访问的时候会自动在请求头加一个Origin字段,用来说明本次请求来自哪个源(协议+域名+端口)。关键是服务器需要配置Access-Control-Allow-Origin头信息,用来说明哪些域可以通过

image.png

安全

XSS