龙空技术网

什么是同源策略?如何解决跨域问题?什么是XSS跨站脚本攻击?

代码开发 438

前言:

今天看官们对“js同源策略是什么”大概比较关切,你们都想要剖析一些“js同源策略是什么”的相关文章。那么小编也在网络上搜集了一些对于“js同源策略是什么””的相关内容,希望大家能喜欢,我们一起来学习一下吧!

一. Ajax跨域问题

跨域:只要协议、域名、端口有一个不同,就被当做不同的域。

ajax跨域:利用ajax技术请求不同域名上的数据。

1. 什么是同源策略

同源策略是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript的浏览器都会使用这个策略。

A网页设置的 Cookie,B网页不能打开,除非这两个网页“同源”。

同源策略的作用:防止其他网页对本网页的非法篡改。

同源指的是:协议、域名、端口都相同。

二. 跨域的方法

1. 跨域资源共享(CORS)

CORS(Cross-Origin Resource Sharing)跨域资源共享,定义了在访问跨域资源时,浏览器与服务器应该如何沟通。

注意:跨域资源共享的请求默认都是不包含cookie信息。

思想:使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是失败。

在request的请求头部中添加一个origin。

服务器在response的请求头部中设置Access-Control-Allow-Origin。

比如: Access-Control-Allow-Origin: 设置和请求头部中的origin中相同的地址,采用“*”也可以。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问。

CORS在浏览器中的实现:

(1)IE中的CORS

使用XDR对象 XDomainRequest:XDR对象和XHR类似,但是其open(请求方法, url),

方法只接收两个参数,XDR的所有请求都是异步的。

(2)其它浏览器中的CORS

直接使用XHR对象

open(请求方法, url, 是否发送异步请求),

方法的url传入绝对的url就可以实现跨域资源共享

(3)跨浏览器的CORS

2. 利用<script>、<img>标签的src

解决方法:Web页面上调用js文件时则不受是否跨域的影响(不仅如此,凡是拥有“src”这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>)。

<script>、<img>标签的src属性并不被同源策略所约束,所以可以获取任何服务器上脚本并执行。

3. 使用jsonp(json with padding 填充式json)

json是一种数据交换格式,一种非官方跨域数据交互协议。

JSON是地下党们用来书写和交换情报的“暗号”,而JSONP则是把用暗号书写的情报传递给自己同志时使用的接头方式。一个是描述信息的格式,一个是信息传递双方约定的方法

客户端:在跨域的url请求中指定回调函数,回调函数是接收到响应时页面执行的函数。

http://域名/json/?callback=handle

服务器端:会将请求的json数据作为回调函数的参数,并调用回调函数。

比如: handle({"name":"xiaoming"})

jsonp包括两个部分:回调函数、数据,

jsonp跨域的原理也是利用script标签的src属性:

客户端的代码

服务器返回的代码remote.js

handle({"name":"xiaoming"})

js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。

所以jsonp是需要服务器端的页面进行相应的配合的。

jsonp的优点:简单适用,老式浏览器全部支持,服务器改造非常小。

jsonp的缺点:只能发送get请求。

4. 使用服务器代理的方式

浏览器请求同源服务器,再由后者请求外部服务。

5. Web Socket

是一个不受同源策略限制的通信协议

补充一点:chrome

header('Access-Control-Allow-Origin:*');header('Access-Control-Allow-Methods:POST,GET');

在IE10以下是这样设置的

在代码中js加上一句

jQuery.support.cors =true;//或者$.support.cors =true;

然后:设置IE浏览器->Internet选项->安全->自定义级别->其他选项下面的->通过源数据:选择“启用”或者“提示”。

webpack直接使用proxy选项配置。

三. XSS跨站脚本攻击

1.什么是xss

xss的全称是:cross site scripting,跨站脚本;

攻击者通过向要攻击的网站中插入一些恶意的html、js代码,来达到攻击其他用户的目的。

攻击者使被攻击者在浏览器中执行脚本后,收集来自被攻击者的数据(如cookie或其他敏感信息)。

避免xss的方法:将用户提交的内容进行过滤。

2. 什么是CSRF

CSRF: 跨站请求伪造,是在用户不知情的情况下,冒充其身份发起了一个请求。

盗取用户cookie,伪造用户请求;

HttpOnly 属性可以阻止通过javascript访问cookie;

要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1.登录受信任网站A,并在本地生成Cookie。

2.在不登出A的情况下,访问危险网站B。

xss是实现CSRF的一种方式。

避免CSRF的方法:在请求中加入随机数,让钓鱼网站无法正常伪造请求。

标签: #js同源策略是什么