这是我参与「第五届青训营 」伴学笔记创作活动的第 7天
Web安全问题在现实中是很常见,如果我们不注重Web的安全问题,那网站一旦出现安全问题就会危害到我们的用户、公司、和程序员本身(祭天)
接下来我们从两个角度来看Web安全
- 假如你是一个hacker————攻击
- 假如你是一个开发者————防御
攻击篇(hacker)
Cross-Site Scripting(XSS)(注入攻击)
XSS主要是利用网站盲目的信任用户提交的内容,而导致的安全漏洞
XSS的特点
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息库(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
第一种:Stored XSS攻击(存储式攻击)
把恶意脚本存储到被攻击者的网站的数据库。其他人访问数据库中的恶意脚本代码后,浏览器执行恶意脚本,被攻击。存储式攻击不止一次攻击,并且被攻击的人不止一个,影响范围大
示例1:
示例2:
Stored XSS的特点
- 恶意脚本被存在数据库中
- 访问页面->读数据===被攻击
- 危害最大,对全部用户可见
第二种:stability XSS(反射型攻击)
Stored XSS又称非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。他不涉及数据库,而是完全在URL上攻击
示例:
stability XSS的特点
- 不涉及数据库
- 从URL上攻击
DOM-based XSS(DOM型XSS)
DOM-based XSS是依赖于客户端的脚本程序可以动态地检查和修改页面内容,而不依赖于服务器端的数据的原理来造成攻击的
示例:
DOM-based XSS的特点
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成
Reflected 与DOM-based的区别在于完成注入脚本的地方不同
Mutation XSS(突变型XSS)
突变XSS漏洞是由浏览器解释HTML标准的方式不同造成的。因为浏览器会在渲染不正常的标签的时候做出一些操作。
示例:
Mutation XSS的特点
- 利用了浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
Cross-site request forgery(CSRF)(跨站请求伪造身份攻击)
Cross-site request forgery(CSRF)是通过伪装来自受信任用户的请求来利用受信任的网站。可以理解为黑客盗用了用户的身份,以用户的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了黑客所想要完成的一个操作
示例:GET
示例:beyond GET
Cross-site request forgery(CSRF)的特点
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
SQL Injection (SQL注入攻击)
SQL Injection是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
示例1:
- 读取请求字段
- 直接以字符串的形式拼接SQL语句
注入攻击不止于SQL,还可以利益CLI,OS command 和Server-Side Request Forgery(SSRF),服务端伪造请求·严格而言,SSRF 不是injection,但是原理类似
示例 2————执行
**示例3 Injection--读取+修改 **
- 流量转发到真实第三方
- 第三方扛不住新增流量
- 第三方服务挂掉
- 你的竞争对手已下线
SSRF 的示例
- 请求用户自定义的callback URL
- web server通常用内网访问权限
Denial of Service(DoS)
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
ReDoS :基于正则表达式的DoS
响应时间上升,接口吞吐量下降
这里给大家补充一个正则表达式----贪婪模式,贪婪模式在重复匹配时[?]vs[no?]:满足“一个”即可vs尽量多
Logical Dos
- 耗时的同步操作
- 数据库写入
- SQL join
- 文件备份
- 循环执行逻辑
示例:
Distributed Dos (DDoS)
Distributed Dos攻击是利用短时间内,来自大量僵尸设备的请求流量,服务不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
Distributed Dos的特点
- 直接访问 IP
- 任意 API
- 消耗大量带宽(耗尽)
中间人攻击
中间人攻击的特点
- 明文传输
- 信息篡改不可知
- 对方身份未验证