同源策略可以隔离各个站点之间的DOM交互、页面数据和网络通信,但同时也限制了web。因此,我们可以在默认页面中引用任何第三方资源,然后引入CSP策略对其进行限制;defaultXMLHttpRequest和Fetch不能跨站请求资源,然后使用CORS策略支持跨域资源。但是,它也带来了安全问题,比如XSS攻击。XSSCookie的HttpOnlyXSS跨站脚本,黑客在HTML文件或DOM中注入恶意脚本,从而在用户浏览页面时使用注入的脚本对用户进行攻击。一开始是通过跨域实现的,所以叫跨域脚本。当页面被注入恶意JavaScript脚本时,浏览器无法区分这些脚本是恶意注入的还是正常的页面内容,所以恶意注入的JavaScript脚本也拥有窃取cookie信息的所有脚本权限,通过document.cookie获取cookie信息。然后通过XMLHttpRequest或者Fetch加CORS发送给恶意服务器。恶意服务器可以模拟登录和转账,在恶意服务器拿到cookie后监听用户行为,使用addEventListener监听键盘事件,获取信用卡信息,发送给恶意服务器,做非法事情修改DOM伪造登录window诱骗用户进入用户名密码页面生成浮窗广告,影响用户体验。XSS分为存储型XSS攻击、反射型XSS攻击和基于DOM的注入恶意脚本的XSS攻击三种方式。存储型XSS攻击:黑客利用站点漏洞(输入恶意代码名称)将恶意代码放置在存在漏洞的服务器上。当用户访问带有恶意代码的页面时,恶意脚本会将用户的cookie信息上传至恶意服务器。反射型XSS攻击:恶意脚本成为用户发送请求的一部分(在get地址上),然后网站将恶意代码返回给用户,在页面执行时进行恶意操作。对于反射型XSS攻击,Web服务器不会存储恶意脚本,这一点不同于存储型XSS攻击。基于DOM的XSS攻击:不涉及服务端。本地恶意软件通过wifi路由器在传输过程中劫持网页资源或利用页面修改页面,先向浏览器注入恶意脚本,再通过恶意脚本将用户信息发送至恶意服务器。解决方案:服务器过滤或转码输入脚本,充分利用CSP,限制其他域资源的加载,禁止向第三方提交数据,禁止执行内联和未授权脚本,并提供报告机制,以便可以尽快发现并修复攻击。使用httpOnly属性,无法通过document.cookie读取增加验证码限制输入长度CSRF点链接CSRF跨站请求伪造,利用用户登录状态通过第三方站点做一些坏事。获取接口是在黑客站点自动启动的。比如黑客请求接口在imgsrc中。图片加载完成后,会自动发起img请求。如果恶意代码是转账,就会被转走。自动发起一个帖子,隐藏表单内容转账,打开网站会自动加载JS提交表单,服务器转账。诱使用户点击链接,点击图片地址是传输接口CSRF不需要在页面中注入恶意代码,只是利用服务器的漏洞和用户的登录状态进行攻击。条件:目标站点必须存在漏洞。用户已经登录到目标站点,并在浏览器上维护该站点的登录状态。用户需要打开第三方站点(黑客或论坛)。关键是找到服务器漏洞。解决方法:利用cookie的SameSite属性,Cookie是浏览器与服务器端维护登录状态的关键数据。通常CSRF攻击都是从第三方站点发起的,第三方站点发送请求时最好禁止发送cookies。因此,浏览器通过不同来源发送http请求时,有以下区别:(1).第三方发起的请求要求浏览器禁止向服务器发送某些关键cookie数据。(2).同站发起的请求需要保证cookie数据正常通过Set-Cookie的SameSite属性值发送:Strict是最严格的,完全禁止第三方cookie。Lax:打开链接时,get会带cookies,而post、img、iframe、loadedurl不会。无:会带来。验证请求来源,在服务器端验证请求来源的站点,服务器可以禁止第三方站点请求。从请求头中的Referer和Origin判断第三方。Referer会包含路径源地址信息。会优先判断Origin包含域名信息的CSRFtoken:1.当浏览器发送请求时,服务器端生成一个CSRFToken,插入到返回的页面中。2、浏览器发起转账时,必须带上页面的CSRFToken。页面安全问题的主要原因在于浏览器为同源策略开启了两个后门:一是页面可以任意引用第三方源。2.通过CORS跨域请求。基于这些,引入了CSP来限制页面任意引入外部资源,引入了HttpOnly来禁止请求发送一些关键的cookie,引入了SameSite和Origin来防止CSRF攻击。
