一、XXS跨站脚本攻击
- 原理:恶意攻击者在web页面中插入一些恶意的script代码。
- 攻击类型:丰持久性XSS攻击(反射型和DOM-base型)和持久性XSS攻击(存储型)
1.1 反射型
- 攻击步骤:
- 攻击者将恶意XSS代码写在目标网站url的search中,将url发给受害者
- 受害者用户打开该页面,XSS代码作为输入提交到服务端,服务端将XSS代码从url中取出拼接到html中返回给浏览器
- 浏览器解析html的同时会执行XSS恶意代码
- 恶意代码执行后,获取用户信息并发送到攻击者的服务器
- 攻击者使用受害者的用户信息调用网站接口,进行违法操作
- 防御措施:后端对提交数据进行处理
1.2 DOM -base型
- 攻击步骤:
- 攻击者将恶意XSS代码写在目标网站url的search中,将url发给受害者
- 受害者用户打开该页面,目标网站前端使用js取出url中的恶意代码并执行
- 恶意代码执行后,获取用户信息并发送到攻击者的服务器
- 攻击者使用受害者的用户信息调用网站接口,进行违法操作
- 防御措施:
- 后端对提交数据进行处理
- 前端将 html代码script代码 转义为普通文本后进行提交(正则替换标签名的箭头)
注:DOM-based型类似于反射型,区别是DOM-based型是在浏览器解析,而反射型是在服务端解析
1.3 存储型
攻击步骤:
- 攻击者将恶意代码提交到目标网站的数据库中(如论坛输入框中输入恶意代码并保存在该页面)
- 用户打开该页面,恶意代码再浏览器中执行
- 恶意代码执行后,获取用户信息并发送到攻击者的服务器
- 攻击者使用受害者的用户信息调用网站接口,进行违法操作
防御措施:
- 后端对提交的数据进行过滤
- 前端将 html代码script代码 转义为普通文本后进行提交(正则替换标签名的箭头)
整体的防御措施:
- cookie安全策略:
在服务端设置cookie的时候,设置 http-only ,这样就可以防止用户通过js获取cookie
http-only: 只允许http或https请求读取cookie,js代码无法读取cookie,发送请求时自动发送cookie
secure-only: 只允许发送https请求时读取,发送请求时自动发送cookie
host-only: 只允许主机域名与domain设置完全一致的网站才能访问该cookie - 对HTML编码:页面某个标签中的内容,需进行html编码,将标签箭头<>等用正则转为纯文本,使script脚本无法执行
- 对HTML Attribute编码:html标签的属性,也需要进行编码
- 对URL进行编码
二、CSRF跨站请求伪造
- 原理:攻击者盗用受害者身份,以受害者的名义发送恶意请求
- 攻击步骤:
- 受害者登录信任网站A(有csrf漏洞的网站),在本地生成cookie,保存在浏览器中
- 在不登出A的情况下,访问危险网站B
- 危险网站B 向 网站A 发送一个跨域request攻击请求
- 向A发送的请求,都会带上之前的cookie
- A网站服务端收到请求,cookie验证通过,攻击请求处理成功
- 分析:
- 当A网站使用get请求更新资源时
则B网站可以简单的通过 <img src=http://www.A.com/api?someParams=xxx /> 标签来完成跨域的攻击请求 - 当A网站使用post请求更新资源时
则B网站可以通过提交表单的方式(也是post请求)来进行攻击
- 结论:
CSRF攻击是源于WEB的隐式身份验证机制!
WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的! - 防御措施:
- 验证 HTTP Referer 字段
Referer字段记录了http请求的来源地址
服务端验证Referer字段记录的来源地址,若不是官网地址,则拒绝改请求
缺点:- Referer字段在某些浏览器上可被篡改
- 用户可在浏览器手动设置请求时不带Referer字段,则所有正常请求都会被拒绝
- 使用 token (推荐)
- 服务端生成token放在用户session或cookie中
- 前端请求时将token作为参数
- 服务端接收到请求,验证参数中token和session中token是否一致,若一致则为合法请求,否则为非法请求
三、SQL注入
- 原理:通过客户端的输入把SQL命令注入到一个应用的数据库中,从而执行恶意的SQL语句