同源策略
浏览器默认两个相同的源之间是可以相互访问资源和操作DOM的,两个不同的源之间如果想要相互访问资源或者操作DOn,会有一套基础的安全策略的制约,称之为同源策略。
同源策略主要表现在DOM、web数据和网络这三个层面。
第一:DOM层面,同源策略限制了来自不同源的js脚本对当前DOM对象读和写的操作,
第二:数据层面,同源策略限制了不同源的站点读取当前站点的cookie indexDB LocalStorage等数据,
第三:网络层面,同源策略限制了通过xmlHttpRequest等方式将数据发送给不同源的站点,
1、页面可以引用第三方资源,也暴露除了很多诸如XSS的安全问题,引入CSP(让服务器决定浏览器能够加载哪些资源,让服务器决定浏览器能否能够执行内联js代码)限制自由程度。
2、使用XMLHttpRequest无法直接进行跨域请求,浏览器引入跨域资源共享策略。
3、不同源的DOM可以通过window.postMessage的js接口进行通讯。
XSS跨站脚本攻击
XSS的攻击方式是黑客向用户的页面中注入恶意脚本,然后再通过恶意脚本将用户页面的数据上传到黑客的服务器上,最后黑客再利用这些数据进行一些恶意操作。
阻止xss攻击,可以通过阻止恶意js脚本的诸如和恶意消息的发送来实现。
1、服务器对输入脚本进行过滤或转码。
2、充分利用csp
3、使用HttpOnly属性:服务器将cookie设置为HttpOnly标志,使用HttpOnly标记的cookie只能使用在Http请求过程中,无法通过js读取。
CSRF攻击
要发起 CSRF 攻击需要具备三个条件:目标站点存在漏洞、用户要登录过目标站点和黑客需要通过第三方站点发起攻击
跨站请求伪造,利用用户的登录状态,并通过第三方的站点做坏事。利用服务器的漏洞和用户的登录态来实施攻击。
1、在 HTTP 响应头中,通过 set-cookie 字段设置 Cookie 时,可以带上 SameSite 选项,SameSite 选项通常有 Strict、Lax 和 None 三个值。
对于防范 CSRF 攻击,我们可以针对实际情况将一些关键的 Cookie 设置为 Strict 或者 Lax模式,这样在跨站点请求时,这些关键的 Cookie 就不会被发送到服务器,从而使得黑客的CSRF 攻击失效。
2、在服务器端验证请求来源的站点。使用referer和origin
Referer 是 HTTP 请求头中的一个字段,记录了该 HTTP 请求的来源地址。
Origin 属性只包含了域名信息,并没有包含具体的 URL 路径,这是Origin 和 Referer 的一个主要区别
3、CSRF Token
第一步,在浏览器向服务器发起请求时,服务器生成一个 CSRF Token,CSRF Token 其实就是服务器生成的字符串,然后将该字符串植入到返回的页面中
第二步,在浏览器端如果要发起转账的请求,那么需要带上页面中的 CSRF Token,然后服务器会验证该 Token 是否合法