这是我参与「第四届青训营」笔记创作活动的第5天
XSS攻击
造成原因——直接提交恶意脚本
分类
存储型的XSS攻击
反射型的XSS攻击
- 不涉及数据库
- 从url上攻击
基于dom的XSS攻击
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成
前两个的区别在于:完成注入脚本的地方
前者在服务端进行注入
基于mutation的XSS攻击
- 利用浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
XSS防御
永远不信任用户提交的内容,不要将用户提交内容直接转换成DOM
前端
- 主流框架默认防御
- google-closure-library
服务端 Node
- DOMPurify (npm包)
如果用户需求是动态生成DOM
- 对string进行转义
- 对svg文件进行扫描
- 避免用户自定义跳转链接
- 避免用户自定义样式
注:
-
同源策略——协议 域名 端口号通通相等
-
CSP内容安全策略
csrf 跨站伪造请求 攻击
在用户不知情的前提下,利用用户权限(cookie)构造指定HTTP请求,窃取或修改用户敏感信息
CSRF的防御
origin+referer
token
-->iframe攻击
-->解决方式
设置响应头部,两个可选值
另外避免偷懒行为
防御CSRF策略 SameSite Cookie属性
避免用户信息被携带 从根源上解决
区别于CORS 跨站资源共享
injection注入攻击
SQL injection
其他
- CLI
- OS command
- SSRF 服务器端伪造请求,严格而言,只是原理类似于injection
注入防御
SQL
其他
DoS 服务拒绝 攻击
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
注:
正则表达式——贪婪模式
const greedyRegExp=/a+/; //有多少匹配多少 贪婪模式
const nonGreedyRegExp=/a+?/; //有一个就行
const str="aaaaaa";
console.log(str.match(greedyRegExp)[0]); //"aaaaaa"
console.log(str.match(nonGreedyRegExp)[0]); //"a"
基于正则表达式的DoS——利用贪婪模式
DDoS
短时间内,来自大量僵尸设备的请求流量,服务器不能即使完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
进攻特点
- 直接访问IP
- 任意API (不区分接口)
- 消耗大量带宽(耗尽)
- 典型:洪水攻击
Dos 防御
基于正则表达式的Dos 防御
DDoS
基于传输层的攻击方式
中间人攻击方式
发生条件
- 明文传输
- 信息篡改不可知
- 对方身份未验证