本文是本人日常看学习视频或者网上一些其他朋友的文章以及自己的理解,整理归纳出来的一篇浏览器方面的内容,其中不免有许多漏掉的问题或是不足之处,发现错误的或者是有什么问题需要补充的朋友们,可以在评论区留言,大家虚心交流,一起进步。
ps:本人是一名90后的程序媛,目前找工作中,第一次发文章,请大家多多指正
浏览器安全可以分为3大块:Web页面安全、浏览器网络安全和浏览器系统安全
页面中最基础、最核心的安全策略:同源策略;
那什么是同源策略呢?通俗点来说就是如果两个URL的协议、端口、域名都相同,我们就称这两个URL同源;
1、XSS攻击
什么是XSS攻击呢?攻击方式主要是往用户的页面注入恶意脚本,然后通过脚本将用户页面上的数据上传到攻击者的服务器上,然后利用这些数据进行恶意操作;
通常情况下,主要有存储型XSS攻击,反射性XSS攻击,基于DOM的XSS攻击三种方式来注入恶意脚本;
针对XSS攻击:主要有3种防范策略
1、通过服务器对输入的内容进行过滤或者转码 2、充分利用好CSP 3、使用httpOnly来保护重要的Cookie信息;
2、CSRF攻击
CSRF全称是Cross-site request forgery跨站请求伪造;
攻击者引诱用户打开他们的网站,在攻击者的网站中,利用用户的登录状态发起跨站请求,简而言之,就是攻击者利用了用户的登录状态,并通过第三方的站点来做一些坏事儿;
方式: 1、自动发起 Get请求; 2、自动发起POST请求; 3、引诱用户点击
和XSS区别:CSRF攻击不需要将恶意代码注入到用户的页面,仅仅是利用服务器的漏洞和用户的登录状态来实施攻击;
满足CSRF的攻击条件:1、目标站点一定要有CSRF漏洞; 2、用户登录过目标站点,并且浏览器上保持有该站点的登录状态; 3、需要用户打开一个第三方站点,可以是攻击者的站点也可以是一些论坛;
预防攻击的手段:
1、充分利用好Cookie的SameSite属性;(攻击者会利用登录状态发起CSRF攻击);
通常CSRF攻击是从第三方站点发起的,要防止CSRF攻击;
我们最好能实现从第三方站点发送请求的时候禁止Cookie的发送,因此在浏览器通过不同源发送HTTP请求时,有如下区别:如果是从第三方站点发起的请求,那么需要浏览器禁止发送某些关键Cookie数据到服务器;如果是同一个站点发起的请求,那么要保证Cookie数据正常发送;
在HTTP响应头中,通过set-cookie字段设置Cookie时可以带上sameSite选项;
2、验证请求的来源站点;
HTTP 请求头中的 Referer 和 Origin 属性
Referrer Policy、Origin 属性、
服务器的策略是优先判断 Origin,如果请求头中没有包含 Origin 属性,再根据实际情况判断是否使用 Referer 值。
- CSRF Token
第一步,在浏览器向服务器发起请求时,服务器生成一个 CSRF Token。CSRF Token 其实就是服务器生成的字符串,然后将该字符串植入到返回的页面中。你可以参考下面示例代码
第二步,在浏览器端如果要发起请求,那么需要带上页面中的 CSRF Token,然后服务器会验证该 Token 是否合法。如果是从第三方站点发出的请求,那么将无法获取到 CSRF Token 的值,所以即使发出了请求,服务器也会因为 CSRF Token 不正确而拒绝请求。
总结:
我们可以得出页面安全问题的主要原因就是浏览器为同源策略开的两个“后门”:一个是在页面中可以任意引用第三方资源,另外一个是通过 CORS 策略让 XMLHttpRequest 和 Fetch 去跨域请求资源。