引言
安全无小事。最近学习了一下web安全知识,主要围绕攻击手段和防御手段展开,了解了一些常用的web攻击手段,以及相应的防御措施,主要有XSS攻击、CSRF攻击、Injection攻击等等。OK,接下来细说,但由于我水平有限,只能以大白话,纯理论口述,本文无代码案例
XSS
XSS(Cross Site Scripting)跨站脚本攻击,实现原理是恶意攻击者往 Web 页面里插入恶意可执行代码(比如script标签),当用户访问该页面时,嵌入其中 Web 里面的恶意代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。xss攻击分为以下几类:
| 类别 | 特点 |
|---|---|
| 存储型XSS | 将恶意代码提交到数据库中,只要用户访问页面,服务器对数据进行读取就会造成攻击,攻击对全部用户可见(危害最大的XSS攻击) |
| 反射型XSS | 不涉及数据库,完全从URL上完成攻击 |
| 基于DOM的XSS | 无需服务器参与,攻击的发起和执行都在浏览器端完成 |
| 基于Mutation的XSS | 利用浏览器渲染DOM的特性来进行攻击,不同浏览器攻击效果有区别 |
XSS攻击成功的主要原因是系统盲目信任用户所提交的内容,不对用户提交内容进行过滤(所以才会提交可执行代码)。那么防御手段主要有:1、对用户提交内容进行解析,不能直接转化成DOM;2、采用内容安全策略(CSP,content security policy),设置安全的域名(白名单)。当万一用户提交的代码中含有恶意url时,也可以因为不在白名单内,而拒绝访问。
PS:其实目前有一些XSS防御工具,不管是前端还是后端。很多都是默认防御的。但了解一下还是好的~
CSRF
CSRF(Cross Site Request Forgery)跨站伪造请求,其实现原理是通过诱导用户打开恶意的链接,在访问恶意链接时,利用用户登录状态发起跨站点请求。比如说有点了一个恶意链接,然后这个恶意链接就通过我的cookie发起了一个银行转账,然后我的钱就没了!CSRF的实现还比较简单,比如说通过将标签的href、src属性设置成恶意请求。
防御思路:1、限制请求来源(origin,referer),如果是异常来源,可以拒绝访问;2、使用token,将token和用户进行绑定,并且设置token的有效期;3、SameSite cookie,使得其它页面无法携带本页面的cookie,从根本上解决CSRF。