Web 开发的安全之旅

115 阅读4分钟

Web 开发的安全之旅 | 青训营笔记

这是我参与 \lceil第四届青训营\rfloor 笔记创作活动的第8天

课程的重点内容

1.攻击
2.防御
3.其他
4.总结

两个角度看安全 “攻击”、“防御”

一、攻击

1、XSS(Cross-Site Scripting)注入攻击

  • 原理:利用了\lceil开发者盲目信任用户的内容\rfloor,直接转化成dom-

image.png

  • 类型:
    • Stored XSS
      • 恶意脚本被存在数据库中
      • 访问页面读数据时会被恶意脚本攻击
      • 危害大,对全用户可见
    • Reflected XSS
      • 不涉及数据库
      • 从URL上攻击

下图构造的参数就能对图中的代码进行XSS攻击 image.png

  • DOM-based XSS
    • 不需要服务器的参与
    • 恶意攻击的发起和执行都在浏览器进行

image.png

  • Mutation-based XSS
    • 利用了浏览器DOM的特性(独特优化)
    • 不同浏览器,会有区别(按浏览器进行攻击)

2、CSRF(Cross-site request forgery)跨站伪造请求攻击

  • 特征
    • 在用户不知情的前提下
    • 利用用户权限(cookie)
    • 构造指定HTTP请求,窃取或修改用户敏感信息
  • 例子

恶意页面使用用户的cookie请求去在后台访问银行转账的接口,并进行了操作

image.png

  • 代码示例

(以后再不要乱点链接哦)

image.png image.png

3、Injection 注入攻击

  • SQL Injection(SQL注入攻击)
    • 攻击过程 image.png
    • 例子
      • 后端demo image.png

      • 前端demo

image.png (any;DROP TABLE table被后端接收后拼接成SQL语句运行)成功被动删库跑路!!!

  • 其他注入攻击

image.png

4、DoS(Denial of Service)服务拒绝攻击

通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多的请求,导致请求挤压,进而触发雪崩效应

  • ReDoS 基于正则表达式的DoS攻击
    • 利用正则表达式的贪婪性

“abababababababbaba”不符合规则的字符串,使得算法一直再计算,响应时间变长 image.png

  • logic DoS

image.png

  • DDoS(Distributed DoS)分布式服务拒绝攻击 使用僵尸机器,大量访问服务器,但不回应,导致服务器一直处于半连接状态(TCP3次握手通信原理)

image.png

5、以上都是应用层的攻击,关于传输层的攻击

  • 中间人攻击(处于客户端和服务端中间,将信息截取、篡改、发送)

image.png

二、防御

1、防御XSS

  • 不要将用户内容直接转化成DOM(永远不要相信用户的提交内容)
  • 防御工具

image.png

  • 检查svg等可以隐藏恶意脚本的文件
  • 允许跨域请求的设置(防止非同源或非允许跨域的地址进行脚本执行)
  • CSP

image.png

image.png

2、CSRF的防御

  • 增加辨识能力

image.png

image.png

  • 用户绑定,使用token(注意token一定要设置合适的过期时间,否则一旦被攻击成功,攻击者就一劳永逸了)

image.png

  • 代码开发时一定要遵守开发规则(get不能用于开发post请求)

image.png

  • SameSite cookie (cookie中含有domain信息,如果使用者跟domain中不符合,就验证失败) image.png
    • 与CORS的对比

image.png

3、Injection 注入防御

  • 使用prepare statement (SQL 注入)

image.png

  • 严格审核、过滤敏感信息(其他注入攻击) image.png

4、防御DoS攻击

  • Regex Dos
    • 代码走查,减少低性能正则表达式
    • 代码扫描+正则性能测试
    • 不要使用用户提供的正则
  • logic DoS
    • 分析代码逻辑(需要考虑性能开销较大时的情况)
  • DDoS image.png
    • 或者实现一些算法,将服务器处于被攻击状态的占用端口回收

5、防御中间人

  • https
  • 静态资源被劫持(SRI (Subresource Integrity)):对比hash值进行验证静态资源是否被攻击

image.png

三、总结

本节内容主要介绍了关于Web中常见的攻击方式和防御措施,安全无小事,作为开发者既要遵循开发规则,也要注意发现安全问题,毕竟事关饭碗啊。

知识很多,时间有限。了解了本质才能更容易找到学习的方向。

下篇笔记:前端必须知道的开发调试知识

基础不牢,地动山摇

TO BE CONTINUED