这是我参与「第五届青训营 」笔记创作活动的第14 天
本堂课重点内容
- web开发——攻击
- web开发——防御
重点知识点介绍
Cross-Site Scripting(XSS)
特点:
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
分类:
-
Stored XSS
恶意脚本被存在数据库中,当用户访问页面读取数据库时就会受到攻击,此类危害最大,对全部用户可见
-
Reflected XSS
不涉及到数据库,从URL上攻击
host/path/?param="<script>xss</script>" -
DOM-based XSS
不需要服务器参与,与Reflected XSS区别在于攻击仅在浏览器上就能完成闭环
-
Mutation-based XSS
利用了浏览器渲染 DOM 的特性(独特优化);不同浏览器,会有区别(按浏览器进行攻击)
防御
- 不要信任用户提交的内容,不要将用户提交内容直接转化为DOM;例如将提交信息转化为string而非直接输出DOM
- 使用现有的防御工具(前端:主流框架默认防御XSS;google-closure-library。服务端(Node): DOMPurify)
- 注意:
- string->DOM
- 上传SVG(可能会携带XSS)
- 自定义跳转连接(可能会返回不安全信息)
- 自定义样式(可能会携带不合法请求/响应)
Cross-site request forgery(CSRF)
在用户不知情的情况下利用用户权限(cookie)构造指定 HTTP 请求,窃取或修改用户敏感信息
防御:
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 禁止eval + inline script
SQL Injection
将SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
防御:
- 找到项目中查询sQL的地方使用prepared statement
- 最小权限原则(sudo|root)
- 建立允许名单+过滤
- 对URL类型参数进行协议、域名、ip等限制来阻止访问内网
Dos & DDos
构造特定请求消耗服务器资源,如ReDos, SYN flood等
防御:
- 定期代码扫描+正则性能测试
- 做好流量过滤(负载均衡,API网关,CDN缓存)和抗量(快速自动扩容,非核心级服务降级)
中间人攻击
利用web传输具有明文传输,信息篡改不可知和对方身份未验证的特性来窃取信息或者修改请求等攻击
防御:
- https:具有可靠性(加密),完整性(MAC验证)和不可抵赖性(数字签名)的特性