一 什么是跨域,为什么会有跨域问题的出现
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跨域
以上是参考总结