这是我参与「第四届青训营 」笔记创作活动的的第6天
Web安全——攻击
Cross-Site Scripting(xss)
恶意脚本
xss攻击形式
XSS的特点
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
XSS demo
stored XSS
- 恶意脚本被存在数据库中
- 访问页面→读数据-被攻击
- 危害最大,对全部用户可见
Reflected XSS
- 不涉及数据库
- 从URL进行攻击
Reflected XSS demo
DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成
DOM-based XSS demo
Mutation-based xss
- 利用了浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
Cross-site request forgery(CSRF)跨站伪造请求
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
CSRF demo
CSRF——GET
CSRF——beyond GET
Injection
- SQL
- CLI
- os command
- Server-Side Request Forgery(SSRF),服务端伪造请求( 严格而言,SSRF 不是injection,但是原理类似)
SQL Injection
Injection demo
执行
读取、修改
SSRF demo
Denial of Service(DoS)
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
正则表达式——贪婪模式
重复匹配时「?vs 「no ?:满足“一个“即可vs尽量多
ReDoS:基于正则表达式的Dos
Distributed DoS(DDos)
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
「不搞复杂的,量大就完事儿了」
DDos特点
- 直接访问IP
- 任意API
- 消耗大量带宽(耗尽)
洪水攻击DDoS demo
传输层攻击方式————中间人攻击方式
- 明文传输
- 信息篡改不可知
- 对方身份未验证
Web安全———防御
防御XSS
永远不信任用户的提交内容
- 一不要将用户提交内容直接转换成DOA
XSS现成防御工具
前端
- 主流框架默认防御XSS
- google-closure-library
服务端(Node)
- DOMPurify
如果必须用户生成动态DOM
- 对Sting进行转移
- 对svg文件进行扫描
- 用户自定义样式,对url图片、字体文件多加留意
Same-origin Policy
三个相同:
- 协议
- 域名
- 端口
HTTP请求:同源、跨域(看服务器设置)
Content Security Policy(CSP)
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对eval + inline script 拒绝
CSP
浏览器meta
CSRF的防御
CSRF——token
先有页面,后有请求
除了origin + Referrer
其他判断【请求来自于合法来源】的方式
- if〔请求来自合法页面)
- then (服务器接收过页面请求)
- then c服务器可以标识)
CSPRF--token
CSRF--iframe攻击
CSRF anti-pattern
GET !== GET + POST
SameSite Cookie
避免用户信息被携带
限制的是:
- Cookie domain
- 页面域名
依赖Cookie 的第三方服务怎么办?
内嵌一个×站播放器,识别不了用户登录态,发不了弹幕
Set-cookie: Samesite=None;Secure;
SameSite vs CORS
sameSite
- Cookie发送
- domain vs页面域名
- “我跟你说个事儿, 出这屋我可就不认了”
CORS
- 资源读写(HTTP 请求)
- 资源域名vs页面域名
- 白名单(允许访问可访问)
SameSite demo
防御CSRF 的正确姿势
lnjection的防御
- 找到项目中查询SQL的地方
- 使用prepared statement
除了SQL之外的Injection防御措施
最小权限原则
- sudo || root
建立允许名单+过滤
- rm
对URL类型参数进行协议、域名、ip等限制
- 防止访问内网
Regex DoS
- Code Review (×(ab*)+/)——避免写出贪婪匹配的方式
- 代码扫描+正则性能测试
- 拒绝使用用户提供的使用正则
DDoS防御
传输层防御
防御中间人
HTTPS的一些特性
- 可靠性:加密————确保明文传输
- 完整性:MAC验证————确保信息不被篡改
- 不可抵赖性:数字签名————确保双方身份可被信任
HTTPS————完整性
接收方会对传递过来的信息进行加密一次,并对哈希值进行对比
数字签名
HTTPS的不可抵赖性————数字签名
HTTPS证书
将HTTP主动升级到HTTPS
Subresource lntegrity( SRI)
静态资源被劫持篡改?对比 hash √
总结