这是我参与「第四届青训营 」笔记创作活动的第4天
Web 开发的安全之旅
一、重点知识介绍
-
攻击手段
-
防御手段
二、详细知识点介绍(攻击篇)
1. XSS攻击(威胁最大)
主要利用了盲目信任用户填写的内容,没有进行过滤导致的
特点:
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie、token)
- 绘制ui(例如弹窗),诱导用户点击填写表单
存储型XSS攻击:
反射型XSS攻击:
不涉及到数据库,从url上进行攻击。一般服务器会根据url里的参数来对应生成页面,而受到攻击后会生成其他页面或者仿造页面
基于dom
不需要服务器参与,恶意攻击的发起和执行全在浏览器上执行,与反射型的区别是恶意脚本的注入方式不一样。反射型主要是通过服务器向浏览器进行注入恶意脚本,而基于dom的主要是由恶意脚本直接向浏览器进行注入
基于Mutation(按浏览器特性攻击)
例如title的值里含有noscript的闭合标签,但是包裹在字符串里,过滤工具发现不了,等真正实现时会报错
2. CSRF攻击——跨站伪造请求
通过仿造表单或者是其他接口,模拟用户行为向服务器发送请求,利用用户的相关信息来骗过服务器,误以为是用户本人的请求
方式:
- GET
- POST
3. Injection注入
最常见的莫过于SQL注入,原理是攻击者的字符串是特定的某些SQL语句或者是Linux语句,如果服务器没有过滤规则,服务端读取请求的时候会顺带执行了里面的SQL语句,从而攻击者可以对数据库可以进行操作
4.SSRF
针对内网的一种攻击,通过请求【用户自定义】的callback URL
5.DoS服务拒绝
通过某种方式(构造特定请求),导致服务器资源显著被消耗,来不及响应更多请求,导致请求挤压,进而形成雪崩效应。
- 利用正则表达式的贪婪模式,服务器端若写了含有贪婪模式的正则表达式,则可能被利用,攻击者发起导致会回溯许多次的字符串等
- DDoS,与上一种贪婪不同,这一种不图发送复杂请求,而是采取数量上获胜,直接访问IP,指望消耗大量带宽(洪水攻击)
6.中间人攻击
主要是基于传输层的攻击,在服务器和浏览器之间进行攻击
三、详细知识点介绍(防御篇)
1.XSS的防御
主流框架默认防御XSS,尽量避免动态生成dom
如果必须根据用户来生成dom,则需要格外注意,对字符串进行转义,对文件进行扫描等
2.CSP策略
前置知识同源策略:意思是协议,域名,端口都相同的请求不会被拒绝,不同的时候根据服务器来决定
CSP能够允许我们开发者去定义那些源(域名)是安全的,来自安全源的脚本可以被执行,否则直接抛错 ,也可以对内联的script语句直接拒绝
3.CSRF防御
对异常来源进行校验,根据Origin + Referrer的方式。在请求头部中,同源发送的get和head请求方式是不会发送origin字段。
通过token
思路是,如果是合法的页面发送的请求,那么该合法页面之前也会有请求发送的记录,有着用于标识token
但是攻击者可能也是注册者,有自己的token去模拟试探,将token绑定给具体用户而不是虚拟的。 同时给token设置一个过期时间,定时更新。
限制同源后对iframe攻击的防御
根据http的响应头部,设置X-Frame-Options的值来防御
值有DENY(当前页面不能作为iframe加载)/SAMEORIGIN(必须是同源的页面才能加载这个iframe)
SameSite Cookie
4.DOS防御
DDoS则是从过滤和抗量两个角度出发,对流量进行监控并作出反应
四、课堂小结
防御方应该永远不要相信用户的输入内容,对内容都要考虑过滤。在写代码时应时刻记着可能的攻击方式,尤其是动态生成dom时。从开发者角度来说我们是防御方,应该注意各自常见的攻击,安全问题一直是很重要的,这节课扩充了我对安全方面的知识面,十分有用。