这是我参与第五届青训营伴学笔记创作活动的第十天!
主要内容
- Cross-Site Scripting(XSS)
- Cross-site request forgery(CSRF)
- Injection
- Denial of Service(DoS)
- Distributed DoS(DDoS)
- 中间人攻击
Web安全问题是什么?
安全问题很常见,会危害:
- 用户
- 公司
- 程序员
Cross-Site Scripting(XSS)是什么?
盲目信任用户的提交内容
特点:
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
XSS demo:
- 没有对内容进行过滤
- 可以直接提交恶意脚本
Stored XSS:
- 恶意脚本被存在数据库中
- 访问页面-读数据-被攻击
- 危害最大,对全部用户可见
Reflected XSS:
- 不涉及数据库
- 从URL上攻击
DOM-based XSS:
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成
Mutation-based XSS:
- 利用了浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
Cross-site request forgery(CSRF)是什么?
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
Injection是什么?
SQL Injection:
- 请求SQL参数(恶意注入)
- 运行SQL code
- 获取其他数据、修改数据、删除数据等等
Injection不止于SQL:
- CLI
- OS command
- Server-Side Request Forgery,服务器端伪造请求
- 严格而言,SSRF不是injection,但是原理类似
Logical Dos
- 耗时的同步操作
- 数据库写入
- SQL join
- 文件备份
- 循环执行逻辑
DDos
攻击特点:
- 直接访问IP
- 任意API
- 消耗大量带宽
中间人攻击
- 明文传输
- 信息篡改不可知
- 对方身份未验证
防御XSS
- 永远不信任用户的提交内容
- 不要将用户提交内容直接转换成DOM
现成工具:
前端:
- 主流框架默认防御 XSS
- google-closure-library
服务端(node) DOMPurify
Content Security Policy(CSP)
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对eval-inline script说不不
CSRF的防御:
- if伪造请求==异常来源
- then限制请求来源->限制伪造请求
- Origin
- 同源请求中,GET+HEAD不发送
- Referer
CSRF--token:
除了Origin+Referrer
其他判断请求来自于合法来源的方式: 先有页面,后有请求:
- if(请求来自合法页面)
- then(服务器接受过页面请求)
- then(服务器可以标识)
加油!拒绝摆烂!让我们不负青春!在青训营度过充实的一天!