这是我参与「第五届青训营 」笔记创作活动的第2天。
攻击篇
Cross-Site Scripting
来源
- 盲目信任用户输入。
- 开发者将字符串未经处理转变为DOM。
"<script>console.log('xss')</script>"
可以恶意制造弹窗等。
分类
- 存储型XSS攻击——恶意脚本被存储在数据库中,所有用户都有可能被攻击。
- 反射型XSS攻击——如果根据URL
localhost/path/?param=<script>console.log('xss')</script>渲染时通过param参数进行渲染时即触发恶意脚本。(“出发”=>“触发”掘金的错别字修正是怎么做到的?) - DOM-based XSS攻击——与反射型相似,但服务器不渲染而是本地渲染DOM。
- Mutation-based XSS——根据浏览器渲染DOM的特性巧妙构造攻击脚本
<noscript><p title="</noscript><img src=x onerror=alert(浏览器奇怪的解析方式)>">为了兼容性,浏览器解析到奇怪的DOM时不会报错,而是选择可能的正确解析方式,因此实际得到以下DOM<img src=x onerror=alert(浏览器奇怪的解析方式)>
XSS攻击防护方式
绝不信任用户输入,并避免动态生成DOM。 所幸的是,当前绝大多数前端框架已经内置了XSS防护功能,在字符串转义处理时会尤其注意。
Cross-site request forgery(CSRF)
在用户不知情的前提下,利用用户权限(cookie)构造指定请求窃取或修改用户敏感信息。
获得权限后构造URL请求即可。
CSRF攻击防护
- 通过referer、Origin等header字段来保证。
- CSRF-token: 服务器返回页面时带上token用于识别客户端
- SameSite Cookie。避免第三方cookie传输。
Injection
SQL injection
经典注入代码123' or '1'='1,利用字符串构造SQL语句操作数据库。
Injection防护
使用prepared statement1
DOS 拒绝服务攻击
ReDOS
根据服务端采用的正则表达式贪婪匹配的漏洞构造特定字符串,从而影响服务器吞吐量。
防护方式:正则性能测试
DDOS 分布式拒绝服务攻击
短时间大量肉鸡发起请求,请求的堆积引发流量控制策略,无法响应新请求。
防护方式:负载均衡,CDN:如cloudflare
中间人攻击
中间人嗅探浏览器与服务器间明文传输的信息并进行篡改,并且信息篡改不可感知。
防护方式:使用Https
- 可靠性: 加密
- 完整性: MAC验证
- 不可抵赖性: 数字签名
SRI
静态资源hash避免CDN中资源被攻击篡改
总结
安全防护与攻击的手段都在不断更新,还需要不断学习。~~难怪浏览器安全措施这么多,实在是过于脆弱了)~~一些攻击方式其实很难想到,还是要在实践中积累经验,积累最佳实践。