这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
跨站脚本攻击 Cross-Site Scripting(XSS)
将恶意脚本注入到页面中,用户访问时就会执行
原页面:用户输入 submit... { ...content..} 并执行内容 render... {...content...} ← 开发者没有对content过滤
攻击者:输入攻击代码 content: '<script>👻</script>' 并被执行
可能造成XSS攻击的原因:
-
开发者盲目信任用户提交的内容
-
前端工程师:直接将用户提交的字符串转化为DOM
XSS的特点:
- 通常难以从UI上感知(攻击者暗地执行脚本)
- 窃取用户信息(如cookie和token)
- 利用JS绘制UI(例如弹窗),诱骗用户点击/填写表单
XSS攻击类型:
存储型XSS攻击 Stored XSS
-
恶意脚本被存储在数据库中
-
用户访问页面 → 服务器端读取数据、写数据给浏览器 → 被攻击
-
危害最大,对全部用户可见
反射型 Reflected XSS
-
不涉及数据库
-
从URL上攻击
-
恶意脚本在服务器端注入
基于DOM的XSS攻击 DOM-based
-
不需要服务器的参与
-
恶意攻击的发起和执行,全在浏览器完成
-
恶意脚本在浏览器端注入
Mutation-based XSS
- 利用了浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
跨站伪造请求 Cross-site request forgery
在用户不知情的前提下,利用用户权限(如cookie),构造指定HTTP请求,窃取或修改用户敏感信息
【用户访问恶意页面 → 发起某个请求(请求在另外一个域名,恶意)】→ 想访问的服务器,收到用户cookie,验证请求合法 → 执行请求的接口 → 【执行成功,返回结果 → 用户受损】
注入 Injection
SQL Injection
HTTP请求,SQL参数(恶意)在请求中载入 → 到达服务器端,读取HTTP请求中的参数,构造SQL语句 → 运行SQL → 执行了恶意的注入 → 数据被攻击
其他方式
- 命令行 CLI
- 系统命令 OS command
- 服务器端伪造请求 Server-side Request Forgery(不是注入攻击,但原理类似)
服务拒绝 Denial of Service
通过某种方式构造特定请求,导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
正则表达式——贪婪匹配模式
在重复匹配中:
使用 ? :有一个满足即可
不使用 ? :有多少就匹配多少
基于正则表达式的DoS ReDoS
回溯型:即利用贪婪匹配模式,若n次不行,就再试试n-1次
结果:服务器端响应时间↗,接口吞吐量↘,响应用户请求↘
Distributed DoS
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
特点:
- 直接访问IP
- 任意API都可
- 消耗大量带宽
基于传输层的攻击
中间人攻击
浏览器 - 中间人😈 - 服务器
发生原因:
- 所有传输都是明文传输
- 传输信息被篡改时不可知
- 服务器、浏览器没有验证对方身份