Web 开发安全 | 青训营笔记

122 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第2天。

攻击篇

Cross-Site Scripting

来源

  1. 盲目信任用户输入。
  2. 开发者将字符串未经处理转变为DOM。

"<script>console.log('xss')</script>"

可以恶意制造弹窗等。

分类

  1. 存储型XSS攻击——恶意脚本被存储在数据库中,所有用户都有可能被攻击。
  2. 反射型XSS攻击——如果根据URLlocalhost/path/?param=<script>console.log('xss')</script>渲染时通过param参数进行渲染时即触发恶意脚本。(“出发”=>“触发”掘金的错别字修正是怎么做到的?)
  3. DOM-based XSS攻击——与反射型相似,但服务器不渲染而是本地渲染DOM。
  4. 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中资源被攻击篡改

总结

安全防护与攻击的手段都在不断更新,还需要不断学习。~~难怪浏览器安全措施这么多,实在是过于脆弱了)~~一些攻击方式其实很难想到,还是要在实践中积累经验,积累最佳实践。

Footnotes

  1. en.wikipedia.org/wiki/Prepar…