这是我参与「第四届青训营 」笔记创作活动的的第4天
Web安全开发
攻击者
攻击手段
XSS-跨站脚本攻击
在开发维护页面通过一种方式把恶意脚本注入进来,在用户访问页面时执行攻击。
XSS主要利用了
- 开发者盲目信任用户的提交内容
- 直接把用户提交的字符串(string)转换成Dom
特点:
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
几种XSS攻击类型:
- Stored XSS
-
- 恶意脚本被存在数据库中
-
- 访问页面→读数据—被攻击
-
- 危害最大,对全部用户可见
- Reflected XSS
-
- 不涉及数据库
-
- 从url上攻击
- DOM-based XSS
-
- 不需要服务器的参与
-
- 恶意攻击的发起 + 执行,全在浏览器上完成
- Mutation -based XSS
-
- 利用了浏览器渲染DOM的特性(独特优化)
-
- 不同浏览器会有区别(按浏览器进行攻击)
CSRF-跨站轨道请求
在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求(发送一个页面),窃取或修改用户敏感信息。
常见请求方式:
GET:构造a标签、img标签等完成请求
beyond GET: 构HTML表单
Injection-注入攻击(SSRF原理类似)
SQL注入攻击:
HTTP请求SQL参数时恶意注入-->传送到serve服务器读参数时生成SQL代码,并运行SQL代码(恶意SQL注入) --> 完成攻击者的代码操作,例如获取其它数据、修改或删除数据。
其它方式
- CLI
- OS command
Server-Side Request Forgery 服务器端伪造请求
删除:接受用户没有进行过滤的options参数,修改options命令,直接删除。
读取、修改:暴露重要文件;把网站流量转发到真实第三方,第三方扛不住新增流量导致第三方服务挂掉。
访问callback === 暴露内网信息
DOS-Denial of Service-服务拒绝、构造特定请求
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
贪婪模式
指写正则表达式时使用问号“?”,例如:
const greedyRegExp = /a+/; //贪婪模式,有多少匹配多少
const nonGreedyRegExp = /a+?/; //匹配到一个就行
const str = "aaaaaa";
ReDoS:
利用贪婪模式
回溯:n次不行则匹配n-1次,一直回溯循环。
Distributed DoS:(DDoS) 短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
传输层-中间人攻击
在浏览器和服务器中间插一个“中间人”进行沟通,中间人可以窃取信息、修改请求和返回。“中间人”可以是恶意的浏览器页面、路由器、ISP等。
中间人主要利用了:
- 明文传输
- 信息篡改不可知
- 对方身份未验证
防御者
防御手段
XSS
永远不信任用户的提交内容,
- 不要将用户提交内容直接转换成 DOM。
- string->DOM,进行字符串转移
- 对svg上传进行扫描
现成工具:
- 主流框架默认防御XSS
- google-closure-library
- 服务器端(Node): DOMPurify:完成字符串转移,避免XSS攻击
Same-origin policy-同源策略:协议、域名、端口都要同源。
CSP:
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- eval + inline script 拒绝
CSRF
判断请求是否来自于合法来源,如果是异常来源则限制请求来源、拒绝请求。
同源请求中,GET +HEAD 不发送
方法
- CSRF——token:先有页面,后有请求
- SameSite Cookie:避免用户信息被携带
做一个中间件专门防御CSRF,整个webapp都能完成对CSRF的防御
Injection
- 找到项目中查询SQL的地方
- 使用prepared statement
- 最小权限原则,避免直接sudo root
- 建立允许名单+过滤,避免rm等高危指令
- 对URL类型参数进行协议、域名、ip等限制,避免访问内网
DoS
Regex DoS:
- 完善Code ReView,避免贪婪匹配方式
- 代码扫描+正则性能测试
- 拒绝使用用户提供的使用正则
DDoS:
流量治理
过滤:
- 负载均衡
- API 网关
抗量:
- CDN
- 快速自动扩容
- 非核心服务降级
传输层-防御中间人
主要是防御中间人
HTTPS-TLS
- 可靠性:加密
- 完整性:MAC验证
- 不可抵赖性:数字签名
Feature Policy/Permission Policy
指定页面可以使用哪些功能,例如:
- camera相机/摄像头
- microphone麦克风/监听声音
- autoplay自动播放
总结
技术不断更迭,通过本节课的学习发现了web安全的重要性及攻击与防御的相关知识,也通过课程明白了不断学习的重要性。不断学习才能跟上技术的更迭和发现更多解决问题的办法。