1、Web安全的两个角度
1.1、黑客——攻击者角度
1.1.1、XSS攻击
XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的
XSS的一些特点
- 暗地里执行脚本,通常难以从UI上感知
- 窃取用户信息(Cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
XSS攻击分类
- Stored XSS - 存储型XSS攻击
- 恶意脚本被存在数据库中国
- 访问页面 --> 读数据 ≡ 被攻击
危害最大,对全部用户可见
- Reflected XSS 反射型XSS攻击
不涉及数据库,完全从url上进行攻击
- DOM-based XSS - 基于DOM的XSS攻击
不需要服务器参与,这种恶意攻击的发起和执行,全部在浏览器完成
- Mutation-based XSS
- 利用浏览器渲染DOM的特性(独特优化)
- 按不同浏览器的特点进行攻击
1.1.2、Cross-site request forgery(CSRF) - 跨站请求伪造
- 在用户不知情的前提下利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息
1.1.3、 SQL Injection - 注入攻击
SQL上的恶意注入攻击
1.1.4、 ReDoS - 基于正则表达式的DoS
基于正则表达式贪婪模式的攻击,攻击者传入一段容易引起不断回溯匹配的字符串,占用服务器接口吞吐量,延长服务器相应时间,致使服务器相应用户操作的时间变长。
- DDoS
短时内hian内,来自大量僵尸是被的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求
攻击特点:直接访问IP,使用任意的API,消耗大量带宽欲将其耗尽
- 中间人攻击
该攻击发生的条件:信息明文传输、信息篡改不可知、对方身份未验证
1.2、开发者——防御者角度
- 针对XSS攻击
永远不要信任用户提交的任何内容、永远不要将用户提交的内容直接换成BOM,而更应该将其作为字符串对待
应对XSS的现成工具
- 前端
-- 主流框架默认防御XSS
-- google-closure-library - 服务端(Node)
-- DOMPurify
应对XSS攻击的其他情况
- 必须动态生成DOM时
-- 对String进行转义 - 上传svg时
-- 先对svg文件进行扫描,是否存在XSS攻击 - 允许用户自定义跳转链接时
-- 做好过滤 - 允许用户自定义样式时
-- 对能设置自定义样式的地方额外注意做好过滤
Content-Security-Policy(CSP)- 内容安全策略
页面中任何标签必须与设置的同源才允许执行
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可执行,否则直接抛错
eval + inline script
CSRF的防御
通过限制请求来源限制攻击
其他判断请求来自于合法来源的方式
CSRF--token防御机制
CSRF--iframe攻击
CSRF anti-pattern
GET和POST请求应当区分开,别混用
SameSite Cookie
避免用户信息被携带
限制Cookie domain属性,看其与当前页面域名是否能匹配
- 依赖Cookie的第三方服务器应对:
-- 标注该Cookie安全(Secure)
Set-Cookie: SameSite=None; Secure;
未完