关于Web开发的安全 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第1天,之前的笔记私底下记得乱七八糟不好意思放上来了,于是从今天正式开始
关于Web安全
本堂课的重要内容
1,Web安全为什么重要 2,常见的网络攻击手段
为什么需要重视web安全
安全问题在web开发的历史中是常见的,会造成经济损失,信息泄露等,乃至于不可估量严重性的危害,主要危害对象有用户、公司、程序员等,因此重视Web开发的安全工作是很有必要,并且值得进行投入的。
常见的攻击手段
Cross-Site Scripting(XSS)
原理:
通过网页开发时,对用户输入信息过滤不足,将恶意代码注入网页中。恶意代码通常是JavaScript,但也包括Java、VBScript、ActiveX、Flash或者普通的HTML。
易遭受XSS攻击的对象
(1)用户输入的组件 (2)对用户输入没有严格的过滤
如何避免
作为开发者,不要完全信任用户的信息提交,并且对信息进行过滤
常见的攻击特点
(1)难以直接从UI上察觉 (2)使用cookie/token窃取信息 (3)使用弹窗等部件,引诱用户直接填入信息
Stored XSS
原理:
把恶意脚本存储到被攻击者的网站的数据库。其他人访问数据库中的恶意脚本代码后,浏览器执行恶意脚本,被攻击。
常见的攻击特点
(1)存储式攻击不止一次攻击,并且被攻击的人不止一个,影响范围大。
Rflected XSS
原理:
最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的Rflected XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击) 恶意代码并没有保存在目标网站,由浏览器解析脚本。
常见的攻击特点
(1)不涉及数据库 (2)从URL上攻击
Dom-based XSS
原理:
Dom Based XSS漏洞是基于文档对象模型的一种漏洞,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
常见的攻击特点
(1)不需要服务器参与 (2)在浏览器完成攻击的发起和进行 (3)由于是前端DOM操作导致,很难留下痕迹
Mutation-based XSS
原理:
利用浏览器渲染DOM的特性,将其中发生的异常转化为攻击,使得发生错误。
常见的攻击特点
(1)利用了浏览器渲染DOM的特性 (2)根据浏览器的种类不同,攻击也存在区别
Cross-site request forgery(CSRF)
原理:
利用用户本来的权限,不经过本人的许可对信息进行非法操作。
常见的攻击特点
(1)用户往往不知情 (2)利用用户权限(cookie) (3)构造指定HTTP请求,窃取或修改用户敏感信息
injection
SQL injection
原理:
恶意在http请求上搭载SQL参数,服务器端读取参数后构成可运行的SQL语句,对数据库进行攻击。
其它的injection:
- CLI
- OS command
- Server-Side Request Forgery(SSRF),服务端伪造请求
常见的injection目的
执行语句,读取,修改,
Denial of Service(DoS)
原理:
通过某种方式,如构造特定请求,大量消耗服务器资源,导致其无法响应更多请求或直接死机,进而导致请求挤压,引起雪崩效应。
ReDoS:基于正则表达式的DoS
原理:
攻击者大多利用回溯行为进行攻击。例如开发者的代码中有一个贪婪正则表达式,攻击者传入一个容易发生回溯的字符串进行攻击,这就会导致电脑响应时间增加,接口吞吐量明显降低,响应用户次数减少。
Distributed DoS(DDoS)
原理:
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而发生雪崩效应,无法响应新请求。即不求能进行复杂的,无法解决的攻击,转而追求以数量促使服务器死机。
常见的攻击特点
(1)直接访问IP (2)任意API (3)消耗大量带宽
常见有;
- SYN flood
- 基于传输层的一种攻击——中间人攻击
关于防御
主题思想
永远不要盲目信任用户的提交内容 不要直接将用户提交内容转化为DOM
防御工具:
- 前端:主要框架大多自带XSS防御 Google-closure-library
- 服务端:DOMpurify
不得已的情况下:
- String转DOM需要进行转义
- 如果用户上传svg文件,需要进行过滤
- 对于用户的自定义跳转链接需要检查
- 自定义样式也同样
same-origin-policy(同源策略)
简单来说,HTTP请求同源可以,跨域不行
content-security-policy(CSP)
允许定义安全的信息源,也可以直接拒绝某些数据
针对CSRF的防御
- 对请求进行验证,检查头部信息,是否为同源请求
- 先有页面,后有请求--服务器对信息源进行标记,带上token并在后续进行检查
- 针对同源的攻击,对其进行限制,X-Frame-Options:(DENY/SAMEORIGIN)限定只有同源页面才能加载某部件。
- 将更新和获取不能放在同一个请求
- Same-site cookie,将cookie限定为只有“我”能用。匹配域名。针对依赖第三方的cookie可以将属性设为none,但要标记secure
针对injection的防御
- 提前找到SQL语句并进行预编译
- 最小权限原则,避免使用root
- 建立权限名单,使用过滤
- 对于访问内网的操作,对URL,ip,域名,协议等进行限制
针对Regex-dos的防御
- code review
- 进行正则性能测试
- 拒绝用户使用的正则
针对ddos的防御
- 针对流量治理,如进行识别和过滤
- 进行抗量处理,如扩容,对非核心服务降级等
针对传输层的防御
- 使用HTTPS,有TLS作为安全保证。具有可靠性,完整性,数字签名具有不可抵赖性
今日的思考
自己做的小项目都还是没有经历过网络攻击的粗糙品,也没有思考过要如何去解决这些问题,今天听了老师讲课之后对网络攻击懂了很多,希望在之后的经历中把这些知识融会贯通。