web攻击与防御| 青训营笔记

227 阅读4分钟

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

本篇笔记的基本内容

  • 进行web攻击的几种常用手段
  • 针对攻击的防御措施

几种web攻击手段

XSS

什么是XSS

Cross Site Scripting(跨站脚本攻击),这种攻击通常利用网站盲目信任用户的提交内容的特点,将恶意代码伪装成正常的用户输入,拼接到原本的代码上,以执行恶意的JS语句。简单来说,XSS就是拼接恶意的HTML。

XSS的特点

  • 通常难以从UI上感知(暗中执行脚本)
  • 可以绘制UI(如弹窗),诱骗用户点击/填写表单

XSS的用途

  • 窃取用户信息(cookie/token、浏览器保存的明文密码、网页上的键盘记录)
  • 获取内网ip以扫描或攻击
  • 截取网页屏幕

XSS攻击分类

  1. Stored XSS
    将恶意脚本存储在数据库中,当用户访问页面,进行数据读取时就会被攻击。这种XSS攻击危害最大,对所有用户可见。
  2. Reflected XSS
    不涉及数据库,从URL上攻击。
  3. DOM-based XSS
    通过修改DOM节点形成的XSS,这类XSS攻击的发起和执行全部在浏览器完成,不需要服务器的参与。

Reflect XSS与DOM-based XSS的区别

  1. Multation-based XSS
    利用浏览器渲染DOM的特性对不同的浏览器进行针对性的区别攻击。

CSRF

什么是CSRF

Cross Site Request Forgery(跨站域请求伪造),指在利用浏览器中储存的用户权限(cookie)伪造指定HTTP请求,在用户不知情的情况下给服务器发送信息(比如转账),窃取或修改用户敏感信息。简单来说,就是引诱用户打开黑客的网站,在网站中利用用户的登录状态发起用户并不知情的跨站请求。

Injection(注入攻击)

SQL Injection

SQL注入攻击会将恶意SQL参数注入网络应用程序,使恶意参数进入SQL语句,当运行SQL代码时,这些参数就会对数据库中的数据进行修改、删除或获取。

fetch("/api",{
    method:"POST",
    headers:{
        "Content-Type":"application/json"
    },
    body:JSON.stringify({
        //恶意的SQL参数 
        username:"any;DROP TABLE table;"
    })
})

参数进入SQL语句:

SELECT * FROM any;
DROP TABLE table;

其他注入攻击方式

  • CLI
  • OS command
  • SSRF(Server-Side Request Forgery,服务端伪造请求,类似注入攻击)

DoS

什么是DoS攻击

DoS即Denial of Service(拒绝服务),造成DoS的攻击被称为DoS攻击。DoS攻击通常通过构造特定请求等方式,耗尽被攻击对象的服务器资源,使得服务器来不及响应,导致请求挤压,造成雪崩效应。

DoS攻击分类

Logical DoS

  • 耗时的同步操作
  • 数据库写入
  • SQL join
  • 文件备份
  • 循环执行逻辑

DDoS

参考文章:https://www.cloudflare.com/zh-cn/learning/ddos/what-is-a-ddos-attack/ Distributed DoS(分布式拒绝服务),指通过大规模互联网流量淹没目标服务器或其周边基础设施,以破坏目标服务器、服务或网络正常流量的恶意行为。

DDoS攻击的工作原理: DDoS攻击是通过连接互联网的计算机网络进行的。 攻击者利用恶意软件控制连接到互联网上的计算机,通过远程控制这些计算机组成的计算机网络向被攻击者的网络或服务器发起进攻。

DDoS攻击的特征:

  • 直接访问IP
  • 任意API
  • 消耗大量带宽

web攻击的防御措施

防御XSS攻击

防护策略:

  • 永不信任用户提交内容
  • 不直接将用户提交内容转换成DOM

方法:

  • 使用现成工具:
    前端:主流框架默认防御XSS;google-closure-library
    服务端(Node):DOMPurify
  • 要求动态生成DOM
  • CSP(Content-Security-Policy)
    识别哪些源(域名)被认为是安全的,来自安全源的脚本可以才可以执行

防御CSRF攻击

防护策略:

  • 阻止不来自于合法源的不明外域访问
  1. 同源检测
  2. Samesite Cookie(避免用户信息被携带)
  • 提交请求时,要求附加本域才能获取的信息
  1. CSRF Token
  2. 双重Cookie验证

防御注入攻击(Injection)

防护策略:

  • SQL Injection
  1. 找到项目中查询 SQL 的地方
  2. 使用 prepared statement
  • Injection byonnd SQL
  1. 最小权限(禁止sudo||root)
  2. 建立允许名单并进行过滤(禁止rm操作)
  3. 对 URL 类型参数进行协议、域名、ip等限制(禁止访问内网)

防御DoS攻击

  • Regex DoS
  1. 代码扫描
  2. 正则性能测试
  3. 禁止用户提供的使用正则
  • Logical DoS
  1. 分析代码中兴能瓶颈
  2. 限流
  • DDoS
  1. 流量治理
  2. 快速自动扩容
  3. 非核心服务降级