这是我参与「第五届青训营」伴学笔记创作活动的第11天
本节课知识要点
- 攻击
- 防御
Web安全一窥
Web安全问题会危害到用户,公司还有程序员
攻击方式
- XSS(Cross-Site Scripting)跨站脚本攻击,将恶意脚本注入到script标签中,其主要利用了开发者盲目信任用户提交的数据内容,直接把用户提交内容变成DOM。分为Stored XSS,Reflected XSS和Mutation-based XSS三种
- 通常难以从UI上感知到XSS攻击
- 可以窃取用户的隐私信息(cookies/token)
- 绘制UI,诱骗用户点击/填写表单
- CSRF(Cross-Site request forgery)跨站伪造请求
- 在用户不知情的前提下
- 利用用户权限
- 构造指定的HTTP请求,窃取或者修改用户的敏感信息
- SQL Injection 数据库注入攻击,通过请求对SQL参数进行恶意注入,在Server中运行之后攻击者就可以获取,修改和删除数据等操作。除了数据库注入还有CLI,SSRF等注入攻击
- Denial of Service(DoS)服务拒绝,通过某种方式,导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而出现雪崩效应
- ReDoS 通过正则表达式来进行一个攻击
- DDos 短时间内,通过大量的僵尸设备的请求流量,导致服务器不能及时完成全部请求,导致请求堆积。
- 中间人攻击,通过恶意WebView,路由器等可以窃取信息,修改请求并返回
防御方式
- 针对XSS攻击,永远不要信任用户提交的内容,不要将其内容直接转换成DOM对象,对其当成字符串处理就好,在前端方面,主流框架都是默认防御XSS攻击的,还有google-closure-library在服务端可以通过DOMPurify来进行防御
- CSP(Content Security Policy)内容安全协议,认定哪些源是安全的,且来自它的脚本是可被执行的,并对eval+inline script说不
- 针对CSRF防御,看请求头部,对请求的Origin,Referer和token进行校验,面对iframe攻击可以通过属性X-Frame-Options:DENY/SAMEORIGIN,在写代码的时候要anti-pattern,get和post要分开,samesite和cors
- 针对注入攻击,找到项目中查询SQL的地方,然后使用prepared statement,遵循最小权限原则,建立允许名单和过滤,对URL类型参数进行协议,域名,ip等限制
- 针对DoS,对于ReDoS有如下方法,Code Review,代码扫描+正则表达式性能测试,或者不提供给用户使用正则表达式。对于DDoS有两个防御思路,过滤和抗量。
- 针对中间人攻击,使用https,但是当签名算法不够健壮的时候会被暴力破解。HSTS,将HTTP主动升级到HTTPS
个人感悟
对于本次课,我意识到Web安全是有多么重要,在学习过程中是会涉猎到这些知识,但是从未有如此细致的去了解过这些内容。