前端跨域问题

151 阅读2分钟

一 什么是跨域,为什么会有跨域问题的出现

1、同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。

2、所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

3、同源策略限制以下几种行为:

(1)Cookie、LocalStorage 和 IndexDB 无法读取

(2)DOM 和 Js对象无法获得

(3)AJAX 请求不能发送

浏览器采用同源策略,禁止页面加载或执行与自身来源不同的域的任何脚本。换句话说浏览器禁止的是来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。

二 前端常见的攻击方式

XXS跨站脚本攻击

HTML注入钓鱼,利用输入框注入html标签

解决:设计XSS Filter,在需要html输入的地方对html标签及一些特殊字符(’<’,’>’,’&’)过滤,将其转化为不被浏览器解释执行的字符。

CSRF跨站点伪造请求

修改url参数,伪造请求

解决:使用post请求,增加加token等

HTTP HEADS 攻击

http协议在head和body之间有一个空行()

将js代码注入到其中

解决:过滤header中出现的非法字符

情景:

比如一个恶意网站的页面通过iframe嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。

三 浏览器中有哪些不受同源限制呢

起一个服务端

一般起的服务是http服务,但是websocket需要起ws服务,ws是webSocket自己定义的。

/*

要使用ws协议,那么就要装一个ws的包

*/

let express = require("express");

let app = express();

let WebSocket = require("ws");

let wss = new WebSocket.Server({port:3000});

wss.on("connection",function(ws){//先连接

ws.on("message",function(data){//用message来监听客户端发来的消息

console.log(data);//俞华

ws.send("你好,"+data+"!");

})

})

6.document.domain + iframe跨域

 此方案仅限主域相同,子域不同的跨域应用场景。实现原理:两个页面都通过js强制设置document.domain为基础主域,就实现了同域。

1)父窗口:(www.domain.com/a.html)

1)子窗口:(child.domain.com/a.html)

7.postMessage跨域

以上是参考总结