这是我参与「第四届青训营 」笔记创作活动的第9天
WEB开发的安全之旅之两个角度看web安全
- 假如你是一个hacker——攻击者
-
Corss-Site Scripting(xss)
- 因为盲目使用新人用户的提交内容
//伪代码 string -> DOM document.write element.innerHTML = anyString; SSR(user_data)- 特点
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(引诱用户点击)
- Stored XSS(危害最大)
- Reflexed XSS
- 不涉及数据库
- 从URL上攻击
- DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起 + 执行,全在浏览器完成
- Mutation-based XSS
- 利用了浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
-
Cross-site request forgery(CSRF)
- 在用户不知情的前提下
- 利用用户权限
- 构造指定HTTP请求,窃取或修改用户敏感信息
-
SQL Injection
- CLI
-
Denial of Service(DoS)
- 基于正则表达式
-
Distributed DoS(DDoS)
- 直接访问ip
- 任意API
- 消耗大量带宽 - 假如你是一个开发者——防御者
-
XSS
- 永远不信任用户提交信息
- 不要把提交信息转化为DOM
- 现成工具
- 前端
- 主流框架默认防御XSS
- google-closure-library
- 服务端
- DOMPurify
- 前端
-
Content-Security-Policy(CSP)
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则报错
- 对 eval + inline script 说 no
-
CSRF的防御
//请求头 if 伪造来源 === 异常来源 then 限制请求来源 -> 限制伪造请求 - Origin(字段) - 同源请求中,GET + HEAD 不发送 - Referer- token
if(请求来自合法页面) then(服务器接受过页面请求) then(服务器可以标识)- iframe攻击
- 通过覆盖原来DOM来进行对于改变操作从而进行页面攻击
- 避免用户信息被携带 SameSite Cookie
- 限制的Cookie domain
- 页面域名
- DoS
- Code Review
- 代码扫描 + 正则性能测试
- 对用户禁止使用正则
- DDoS
- 流量治理
- 负载均衡
- API网关
- CDN
- 快速自动扩容
- 非核心服务降级
- 流量治理
-
总结
安全无小事,但凡出了安全事情都时毁灭性的打击。大部分的安全问题都是我们的代码问题,但是有一些是有一些依赖产生,那导致了很难去维护。Try to be better