Web开发安全:关于攻击 | 青训营笔记

102 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

跨站脚本攻击 Cross-Site Scripting(XSS)

将恶意脚本注入到页面中,用户访问时就会执行

原页面:用户输入 submit... { ...content..} 并执行内容 render... {...content...} ← 开发者没有对content过滤

攻击者:输入攻击代码 content: '<script>👻</script>' 并被执行

可能造成XSS攻击的原因:

  • 开发者盲目信任用户提交的内容

  • 前端工程师:直接将用户提交的字符串转化为DOM

XSS的特点:

  • 通常难以从UI上感知(攻击者暗地执行脚本)
  • 窃取用户信息(如cookie和token)
  • 利用JS绘制UI(例如弹窗),诱骗用户点击/填写表单

XSS攻击类型:

存储型XSS攻击 Stored XSS

  • 恶意脚本被存储在数据库中

  • 用户访问页面 → 服务器端读取数据、写数据给浏览器 → 被攻击

  • 危害最大,对全部用户可见

反射型 Reflected XSS

  • 不涉及数据库

  • 从URL上攻击

  • 恶意脚本在服务器端注入

基于DOM的XSS攻击 DOM-based

  • 不需要服务器的参与

  • 恶意攻击的发起和执行,全在浏览器完成

  • 恶意脚本在浏览器端注入

Mutation-based XSS

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

跨站伪造请求 Cross-site request forgery

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

【用户访问恶意页面 → 发起某个请求(请求在另外一个域名,恶意)】→ 想访问的服务器,收到用户cookie,验证请求合法 → 执行请求的接口 → 【执行成功,返回结果 → 用户受损】

注入 Injection

SQL Injection

HTTP请求,SQL参数(恶意)在请求中载入 → 到达服务器端,读取HTTP请求中的参数,构造SQL语句 → 运行SQL → 执行了恶意的注入 → 数据被攻击

其他方式

  • 命令行 CLI
  • 系统命令 OS command
  • 服务器端伪造请求 Server-side Request Forgery(不是注入攻击,但原理类似)

服务拒绝 Denial of Service

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

正则表达式——贪婪匹配模式

在重复匹配中:

使用 ? :有一个满足即可

不使用 ? :有多少就匹配多少

基于正则表达式的DoS ReDoS

回溯型:即利用贪婪匹配模式,若n次不行,就再试试n-1次

结果:服务器端响应时间↗,接口吞吐量↘,响应用户请求↘

Distributed DoS

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

特点:

  • 直接访问IP
  • 任意API都可
  • 消耗大量带宽

基于传输层的攻击

中间人攻击

浏览器 - 中间人😈 - 服务器

发生原因:

  • 所有传输都是明文传输
  • 传输信息被篡改时不可知
  • 服务器、浏览器没有验证对方身份