这是我参与「第四届青训营 」笔记创作活动的第1天
攻击者角度
XSS 跨站脚本攻击
含义
攻击者注入JS脚本,访问页面时,代码被执行
导致原因
盲目信任用户提交的内容,导致普通String转化成DOM
后果及难点
- 无法从UI感知
- 窃取用户信息
- 诈骗信息弹窗
- 导致用户隐私泄露,并使用其电脑挖矿
类别
- 存储型CSS Stored XSS: 恶意脚本被存储至数据库中,危害最大,涉及全部用户
- 反射型CSS Reflected CSS: 从URL进行攻击
- 基于DOM的XSS攻击 DOM-based CSS: 不需要服务器参与,直接在浏览器端完成
- 基于Mutation的XSS攻击: 按浏览器进行区别攻击的方式
CSRF 跨站伪造请求
含义
其他域名伪造Cookie访问服务器端接口,且请求执行成功
过程及其难点
- 用户全程不需要访问目标网站
方法
- GET方法
- 表单
- injection
- SQL
- CLI
- OS Command
- Server-Side Resquest Forgery(SSRF)
类型
- 流量转发
- 删库跑路
- SSRF暴露内网信息
- DDOS: Ex. 洪水攻击: 三次握手没完成,连接无法被释放
- ReDoS: 通过正则表达式的DoS
基于传输层的攻击方式
中间人攻击
含义
可以基于浏览器,也可以基于路由器等,服务器和用户之间难以感知
防御角度
XSS 跨站脚本攻击
工具
常规情况
- Google closure library
- 主流框架默认防御 特殊情况
- String进行转义
- 对上传SVG进行扫描
- 禁止自定义跳转链接,或者做过滤
- 禁止自定义样式
同源策略与CSP
协议,域名和端口号都相等即为同源,CSP为内容安全策略,可以定义哪些源为安全的 服务器端例子:
Content-Security-Policy: script-src 'self'
Content-Security-Policy: script-src 'self' https://domain.com
CSRF 跨站伪造请求
方法
限制伪造请求的来源,
- 对origin+Referrer进行校验
- 先有页面,后有请求
- 验证Token:用户绑定+前向保密
- CSRF的特殊情况: iframe攻击
特征是非跨域请求,窃取用户点击对象,解决方法为: X-Frame-Options设置,必须同源页面才能加载iframe
注意
- Get和Update的API要分开,避免偷懒行为
- SameSite Cookie,限制domain属性,和当前页面域名是否匹配;依赖第三方cookie的可以把Set-Cookie变为None,以确保安全
- CORS和SameSite的区别:
- SameSite 是Cookie发送,Domain vs. 页面域名
- CORS是资源读写,资源域名 vs 页面域名,白名单策略