笔记创作活动的的第 8 天。
常见的攻击方式
XSS (Cross-Site Scripting) 跨站脚本攻击
XSS 攻击主要利用了网站盲目信任用户提交的内容,导致攻击者向网站中注入恶意攻击的脚本被执行。
开发者危险的操作:document.write、element.innerHTML、SSR
XSS 的特点:
- 通常难以从 UI 上感知(暗地执行脚本)
- 窃取用户信息(cookie、token)
- 绘制 UI(例如弹窗),诱骗用户点击/填写表单
按照性质分类:
- 存储型 XSS 攻击:恶意脚本被存入数据库中,危害很大,当用户访问网站读取该数据时,都会被脚本攻击到。
- DOM 型 XSS 攻击:从 URL 地址注入脚本
/host/path?param=<script>alert('攻击')</script>,当获取该参数时,就会执行恶意脚本,注入脚本和执行脚本的地方都在浏览器。 - 反射型 XSS 攻击:与 DOM 型 XSS 攻击的区别在于,反射型是在服务器端被注入脚本,通过请求的响应到浏览器执行。
- Mutation-based XSS 攻击:利用了浏览器渲染 DOM 的特性,不同浏览器会有区别(按浏览器独特优化再进行攻击)
CSRF (Cross-site request forgery) 跨站伪造请求
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造特定 HTTP 请求,窃取或修改用户敏感信息
常见攻击手段:构建恶意请求
用户点击a标签就发起恶意请求
<a href="https://blank.com/transfer?to=hacker&amount=100">点我抽奖</a>
用户访问页面,只要加载了这个img标签,就会发起恶意请求
<img style="dispaly:none" src="https://blank.com/transfer?to=hacker&amount=100" />
伪造form表单
<form action="https://blank.com/transfer?to=hacker&amount=100" method="POST">
<input name="amount" value="10000000000" type="hidden" />
<input name="to" value="hacker" type="hidden" />
</form>
复制代码
注入
SQL 注入
- 攻击者:请求 → 带有高危 SQL 语句的参数(恶意注入)
- 服务器:获取请求参数 → 根据参数拼接 SQL 代码 → 执行 SQL 代码(恶意 SQL 也会被执行)
服务器端(有漏洞的代码):
攻击者:
命令注入
服务器端(有漏洞的代码): 攻击者:
危害:
- 暴露重要信息,如密码、ssh 文件
- 服务器配置被恶意修改
- 攻击者可能触及公司内网
Dos 攻击
概念:通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求积压,进而雪崩效应。
Regex Dos
基于正则表达式的 Dos,利用正则匹配的贪婪模式,导致服务器响应时间延长,接口吞吐量明显降低,响应用户的请求次数大大下降。
DDos
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,无法响应新的请求。
特点:
- 直接访问 IP
- 任意接口
- 消耗大量带宽
基于传输层的攻击
中间人攻击
如何防御
防御 XSS
-
永远不信任用户提交的信息,不要将用户提交内容的直接转换成 DOM。
-
对 string 进行转义。
-
对用户上传的 svg 文件进行检验,因为 svg 文件也可以嵌入 script 标签。
-
如果允许用户自定义跳转链接,则需要对链接进行过滤,因为链接可以插入执行 JS 代码。
-
如果允许用户自定义样式,则需要对样式内容进行校验,因为 background 属性也可以嵌套 URL。
-
使用现成的工具
- 前端:主流框架默认防御(Vue、React),google-closure-library
- 服务端:Node 开发时使用 npm 包(DOMPurify)进行处理
CSP (Content Security Police) 内容安全策略
- 利用同源策略
- 开发者定义哪些源(域名)是安全的
- 来自安全源的脚本可以执行,否则直接抛出错误
- 拒绝所有的
eval、inline script代码
配置服务器端的响应头
Content-Security-Police: script-src 'seft' 同源
Content-Security-Police: script-src 'seft' http://domain.com
复制代码
配置浏览器端的 meta 标签
<meta http-equiv="Content-Srcurity-Police" content="script-src self" />
复制代码
防御 CSRF 攻击
- 限制请求来源
- token
- iframe 攻击方式的防御 配置 web 服务器响应头:
X-Frame-Options : DENY / SAMEORIGIN - 避免将 GET 请求和 POST 请求写到同一个接口
- SameSite Cookie 不携带非当前页面域名的 cookie
防御 注入攻击
- 使用
prepared statement提前编译 SQL 语句。 - 最小权限原则,避免使用
sudo执行命令,避免使用root权限。 - 建立允许名单+过滤,拒绝
rm等高危操作 - 对 URL 类型参数进行协议、域名、ip 等限制,拒绝用户直接访问内网。
防御 Regex Dos 攻击
- 避免写出贪婪匹配的正则语句
- 代码扫描 + 正则性能测试
- 拒绝使用用户提供的正则
防御 DDos
防御 基于传输层的中间人攻击
HTTPS 协议的特性:
- 可靠性:加密,避免明文传输
- 完整性:MAC 验证,避免数据被篡改
- 不可抵赖性:数字签名,确保双方身份