Web 开发的安全 | 青训营笔记

92 阅读5分钟

Web 开发的安全 | 青训营笔记

这是我参与「第四届青训营 - 前端场」笔记创作活动的第10天。

Web 开发的安全相当重要,并且安全问题很常见,会危害用户、公司和程序员,因此我们必须得重视 Web 开发的相关安全工作,接下来将从攻击角度谈一下 Web 开发的安全。

攻击角度

常见的攻击方式

1、Cross - Site Scripting(XSS)

原理

通过网页开发时,对用户输入信息过滤不足,将恶意代码注入网页中。恶意代码通常是JavaScript,但也包括Java、VBScript、ActiveX、Flash或者普通的HTML。

攻击实施的基本条件
  • 向 Web 页面注入精心构造的代码
  • 对用户输入没有做过滤,恶意代码可以被执行
主要利用
  • 开发者盲目信任用户提交的内容

前端工程师直接把用户提交的内容转化为 DOM。

特点
  • 通常难以从UI上感知(暗地执行脚本)

窃取用户信息(cookie/token)

  • 回执 UI(例如弹窗),诱骗用户点击/填写表单
分类
Stored XSS

存储型 XSS 又称持久性 XSS。是通过恶意代码被持久化保存在服务器上然后显示到 HTML 页面之中。

  • 恶意脚本被存在数据中
  • 访问页面 → 读数据 === 被攻击
  • 危害最大,对全部用户可见

Reflected XSS

反射型 XSS 又称非持久性 XSS,是目前最容易出现的一种 XSS 漏洞。

用户在请求 URL 地址的时候会携带一部分数据,当客户端进行访问某条链接时,攻击者将恶意代码植入 URL,若未将 URL 进行过滤,直接返回响应界面,那么 XSS 攻击代码就会被一起传送回用户的浏览器。一般来说,返回结果会包括用户原始的搜索内容,一旦执行被精心包装的 XSS 恶意代码,用户的信息就可以被窃取,可以模拟用户进行一系列操作。

  • 不涉及数据库
  • 从 URL 上攻击

DOM - based XSS

DOM 型 XSS 漏洞是基于文档对象模型(Document Object Model)的一种漏洞。他的攻击不需要服务器解析响应,触发是靠浏览器端 DOM 解析。

客户端上的 JS 脚本可以访问浏览器的 DOM 并修改页面内容,不依赖服务器的数据,直接从浏览器端获取数据并执行。

  • 不需要服务器的参与
  • 恶意攻击的发起 + 执行,全在浏览器完成

Mutation - based XSS

如果用户所提供的富文本内容通过 javascript 代码进入 innerHTML 属性后,一些意外的变化会使得这个认定不再成立:浏览器的渲染引擎会将本来没有任何危害的 HTML 代码渲染成具有潜在危险的 XSS 攻击代码。

  • 利用了浏览器渲染 DOM 的特性(独特优化)
  • 不同浏览器,会有区别(按浏览器进行攻击)

2、Cross - site request forgery(CSRF)

跨站请求伪造(Cross-Site Request Forgery,CSRF)是一种使已登录用户在不知情的情况下执行非本意的操作的攻击方法。因为攻击者看不到伪造请求的响应结果,所以 CSRF 攻击主要用来执行动作,而非窃取用户数据。当受害者是一个普通用户时,CSRF 可以实现在其不知情的情况下转移用户资金、发送邮件等操作;但是如果受害者是一个具有管理员权限的用户时 CSRF 则可能威胁到整个 Web 系统的安全。

特点
  • 在用户不知情的前提下
  • 利用用户权限(cookie)
  • 构造指定 HTTP 请求,窃取或修改用户敏感信息

3、Injection

注入攻击是攻击者通过 Web 应用传播恶意的代码到其他的系统上。这些攻击包括系统调用(通过 shell 命令调用外部程序)和后台数据库调用(通过 SQL 注入)一些设计上有缺陷的 Web 应用中的 Perl,python 和其他语言写的脚本(script)可能被恶意代码注入和执行。任何使用解释执行的 Web 应用都有被攻击的危险。

SQL Injection

SQL 注入(SQL injection),是发生于应用程序与数据库层的安全漏洞。只要是支持处理 SQL 指令的数据库服务器,都有可能受到此种手法的攻击。

其他形式
  • CLI
  • OS command
  • Server-Side Request Forgery(SSRF),服务端伪造请求 严格来说,SSRF 不是 Injection,但是原理类似

4、Denial of Service(DoS)

通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及想赢更多请求,导致请求挤压,进而雪崩效应。

补充:正则表达式——贪婪模式

贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配(最大范围匹配)。

ReDoS:基于正则表达式的DoS

贪婪:n次不行? n-1次再试试?——回溯。

Logical Dos
  • 耗时的同步操作
  • 数据库写入
  • SQL join
  • 文件备份
  • 循环执行逻辑

5、Distributed DoS(DDoS)

短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效益,无法响应新请求。即不搞复杂的,就搞量大的。

特点
  • 直接访问IP
  • 任意API
  • 消耗大量带宽
洪水攻击

中间人攻击

  • 明文传输
  • 信息篡改不可知
  • 对身份未验证

如有错误欢迎指正。