这是我参与「第四届青训营 」笔记创作活动的第6天。
Cross-Site Scripting(XSS)
他的恶意脚本注入进来
发生情况
开发者盲目信任用户提交的内容,直接将输入的字符串就去放到DOM里
document.writeelement.innerHTML = anyStringSSR(user_data)//伪代码
特点
- 通常很难从
UI上去感知(因为他是偷偷的将脚本注入进来的) - 窃取用户信息(
cookie/token) - 绘制
UI(例如弹窗),诱导用户去点击/填表格等
防御
不要相信用户传上来的东西
类型
stroed xss存储型XSS
特点
- 而已脚本被存储到数据库里
- 访问页面,就会读取到数据,就等于是被攻击了
- 意思就是,无论是谁。只要访问了,就都会攻击,所以范围广,危害大
Reflected xss发射型XSS
特点
-
不涉及数据库
-
从
URL上攻击 -
他的脚本注入是在服务端的时候注入
类似于
/path/?params=<script>alert('123')</script>
DOM-based XSS基于DOM的XSS攻击
特点
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成
- 他的脚本注入是在浏览器端完成的
一般也是,我们从url里面获取参数,但是我们没有判断,直接innerHTML这种
Cross-site request forgery(CSRF)
跨站伪造请求
特点
- 在用户不知情的情况下进行
- 利用用户权限(
Cookie) - 伪造指定
HTTP请求,窃取或修改用户敏感信息
防御
必须是同源请求
举例
CSRF-token
sequenceDiagram
Browser-->>Server:请求页面
Server-->>Browser: 页面+token
Browser-->>Server: 请求API+token
Server-->>Browser: 验证token+数据
Note over Browser,Server:token必须是当前用户的token,token需要有过期时间
SameSIte cookie
他限制的是cookie的domain,只有相同的,那么才可以访问,他还限制页面的域名
sequenceDiagram
域名A-->>第一方Cookie:请求是可以完成的
Note over 域名A,第一方Cookie:第一方cookie,domain是A
域名A-->>第三方Cookie:不可以完成
Note over 域名A,第三方Cookie:第三方cookie,domain不是A
injection注入
典型的是SQL Injection
DOS
这是服务器的攻击
定义:
通过某种方式(特定的请求),导致服务器资源被显著消耗,来不及响应更多的数据,导致请求挤压,从而导致雪崩
REDOS
利用的是正则表达式的贪婪模式
例如:
/^((ab)*)+$/
它可以匹配ab,ababababab
但是无法匹配abababababababa,这会导致他一直发送请求,造成了回溯
防御
避免使用贪婪模式
DDOS
定义
短时间,来自大量僵尸设备的请求流量,服务不能及时完成全部请求,导致请求堆积,进而雪崩,无法响应新的请求
特点:
- 大量的请求
- 直接去访问
API,他不会去拐弯抹角的,他是直接去访问 - 任意
API - 消耗大量的带宽
防御:
- 流量控制
- 负载均衡(过滤)
API网关(过滤)CDN
- 快速自动扩容
- 非核心服务降级
中间人攻击
在浏览器和服务器之间,浏览器认为自己在和服务器打交道,服务器认为自己在和浏览器打交代,但他们其实是和一个中间人在交流,中间人可以获取到数据,可以修改数据等
特点
- 明文传输
- 信息篡改不可知
- 对方身份未验证