一、XSS
跨站脚本攻击(Cross-site scripting,aka XSS)是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等。本质是恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行
1、攻击方式
类型 | 存储区(恶意代码存放的位置) | 插入点 |
---|---|---|
存储型 XSS | 后端数据库 | HTML |
反射型 XSS | URL | HTML |
DOM 型 XSS | 后端数据库/前端存储/URL | 前端 Javascript |
- 存储型(持久型):用户打开目标网站时,
网站服务端
将恶意代码从数据库
取出,拼接在 HTML 中返回给浏览器解析执行。常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等 - 反射型(非持久型):用户被诱导打开带有恶意代码的
URL
时,网站服务端
将恶意代码从URL
中取出,拼接在 HTML 中返回给浏览器解析执行。常见于通过URL
传递参数的功能,如网站搜索、跳转等 - DOM 型:攻击者构造出特殊的
URL
,其中包含恶意代码。用户打开带有恶意代码的URL
。用户浏览器接收到响应后解析执行,前端 JavaScript
取出URL
中的恶意代码并执行。属于前端 JavaScript 自身的安全漏洞
2、预防方式
- 输入过滤:对于明确的输入类型,如数字、URL、电话号码、邮件地址等等内容
- 输入内容长度控制:对于不受信任的输入,限定一个合理的长度
- 对 HTML 做充分转义:不同情况采用不同转义规则,采用成熟的的转义库
- CSP(Content Security Policy):内容安全策略本质上是建立白名单,规定浏览器只能够执行特定来源的代码
- HTTP-only Cookie:禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie
- 验证码:防止脚本冒充用户提交危险操作
二、XSRF
CSRF(Cross-site request forgery,aka CSRF or XSRF)跨站请求伪造,是一种冒充受信任用户,向服务器发送非预期请求的攻击方式。本质是利用用户的登录态发起恶意请求
1、攻击方式
- GET 类型的 CSRF:只需要一个 HTTP 请求
- POST 类型的 CSRF:利用起来通常使用的是一个自动提交的表单。模拟用户完成了一次 POST 操作
- 链接类型的 CSRF:需要用户点击链接才会触发。通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户
2、预防方式
- 多使用 post 接口
- 增加验证,例如密码、短信验证码、指纹等