这是我参与「第五届青训营 」笔记创作活动的第10天
攻击篇
Cross-Site Scripting(XSS)
跨站脚本攻击
访问页面时,被攻击者注入恶意脚本,对页面产生了攻击
XSS = 网站盲目信任用户提交的内容 + 网站将string转化成了DOM
document.write,element.innerHTML = anyString,SSR(user_data)
- 特点
通常难以从UI上感知(暗地执行脚本)
窃取用户信息(cookie/token)
绘制UI(例如弹窗),诱骗用户点击/填写表单 - Stored XSS
存储型XSS攻击,恶意脚本会被存到数据库中,访问页面时读数据即被攻击;危害最大,对全部用户可见 - Reflected XSS
反射型XSS攻击,不涉及数据库,从URL上攻击。
- DOM-based XSS
基于DOM的XSS攻击,不需要服务器参与,恶意攻击的发起和执行全在浏览器完成
- Reflected和DOM-based区别
完成注入脚本的地方不同
- Mutation-based XSS
利用了浏览器渲染DOM的特性(独特优化),按浏览器的类型进行攻击
Cross-site request forgery(CSRF)
跨站伪造请求
在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息。
Injection
注入
- SQL Injection
demo1
- CLI
- OS command
- Server-Side Request Forgery(SSRF)服务器伪造请求
不是injection,但原理类似
demo1 删除
demo2 读取+修改
Denial of Service(DoS)
服务拒绝。
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
- 正则表达式贪婪模式
- ReDoS
基于正则表达式的DoS,产生大量回溯行为
- Distributed DoS(DDoS)
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
耗时的同步操作,数据库写入,SQL join,文件备份,循环执行逻辑
demo 洪水攻击
三次握手攻击者不返回第三次ACK,导致连接不能被释放
中间人攻击
基于传输层的攻击
在浏览器和服务器中插入一个中间人。
防御篇
XSS
永远不要相信用户提交的内容,不要将提交的内容直接转换成DOM
现成工具:
- 前端:主流框架默认防御XSS,google-closure-library
- 服务器(Node):DOMPurify
- 如果用户必须要求上传动态DOM
string->DOM:要对string进行转译,new DOMParser()
如果允许上传svg,需要对svg进行扫描
跳转链接,Blob动态生成script
自定义样式
Content Security Policy(CSP)
内容安全策略
允许开发者定义哪些源是安全的;来自安全源的脚本可执行,否则直接报错;对eval+inline script直接报错
- Same-origin Policy同源策略
同源:协议 域名 端口全都一致
HTTP请求:同源没问题,跨域不可行 - 服务器响应头部
- 浏览器meta
CSRF的防御
- 通过请求头部的Origin和Referer判断是否为同源
Origin只存在于POST请求,而Referer则存在于所有类型的请求。 - token
- X-Frame-Options响应头
DENY:当前页面不能被iframe加载;SAMEORIGIN:同源页面才能加载当前iframe。
iframe攻击,在iframe中跳跃到同源网站进行请求
- CSRF anti-pattern
避免以下代码模式
- 避免用户信息被携带:SameSite Cookie
如果CSRF利用用户权限,用户权限在cookie中;如果请求不带cookie,则没有问题。
- SameSite vs CORS
SameSite:针对Cookie发送,对比cookie的domain属性与当前页面域名是否一致,限制条件是当前页面。
CORS:针对资源读写/HTTP请求限制,对比资源域名与当前页面域名,是白名单机制,允许访问才能访问。
注入
找到代码中查询SQL的地方,使用prepared statement,将SQl语句进行提前编译,导致注入攻击不能完成。
- 最小权限原则
所有命令没有root权限,不能用sudo执行 - 建立允许名单和过滤
不能使用rm - 对url参数类型进行协议、域名、ip等限制
不能访问内网
防御DoS
- Regex DoS
完善代码,避免正则匹配贪婪模式
代码扫描+正则性能测试
拒绝用户提供的使用正则 - DDoS
流量治理:负载均衡、API网关、前置CDN
快速自动扩容
非核心业务降级
传输层——防御中间人
HTTP3内置了TLS1.3
- HTTPS特性:
- TLS过程:
- HTTPS完整性
传输内容包含加密信息和加密信息哈希值 - HTTPS的不可抵赖性:数字签名
- HSTS
将HTTP主动升级为HTTPS