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

95 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第1天

XSS 攻击

  • 客户端提交一个 script 脚本,其他用户渲染时将 script 脚本渲染到网页中。
  • 永远不要相信用户提交的所有内容,永远不要讲用户提交的内容直接转化成为 DOM。
  • 前端:主流框架默认会防御,或者利用 google-closure-library 防御。
  • 后端(Node):使用 DOMPurify等。
  • 注意 string->DOM, svg, 自定义跳转链接, 自定义样式

Stored XSS

脚本存储在服务器数据库中,任何人读取渲染都会导致被攻击。

Reflected XSS

不涉及到数据库,参数被服务端渲染,用户访问页面的时候直接导致被攻击。

Dom-based XSS

不涉及服务端,用户端主动读取参数并渲染。

Mutation-based XSS

利用浏览器渲染过程进行攻击,例如拼凑浏览器的 title 属性使得注入恶意脚本。

CSRF:跨站伪造请求

恶意页面中构造 HTTP 请求,访问其他网站接口(例如转账接口),进而实现攻击。用户没有访问页面,只是间接请求了接口。

利用 img.src, form input 等构造请求。

  • 利用浏览器的同源策略。
  • 利用 token:API 需要携带用户 token,以此进行验证。
  • X-Frame-Options:防止 iframe 攻击。
  • 利用 SameSite Cookie.
  • 插入一个 CSRF 防御中间件。

SQL 注入

恶意构造 SQL 语句。

使用 prepared statement.

CLI Injection

服务端构造的 cli-command 被恶意注入代码。

  • 最小权限原则,尽量不给 sudo / root。
  • 建立白名单机制,只允许制定命令。
  • 对 URL 参数进行协议、域名、IP 限制。

SSRF

用户端构造恶意参数,使得服务端发起恶意网络请求。由于服务端具有内网访问权限,从而暴露内网信息。

DOS 服务拒绝

攻击者通过某种方式挤占服务端资源,导致正常的请求无法被解析。

基于正则表达式的DOS

利用正则表达式匹配的回溯模式,恶意构造复杂的字符串结构浪费计算资源,进而发起攻击。

  • 在 code review 的时候检查贪婪匹配
  • 使用代码扫描工具与正则性能测试
  • 拒绝使用用户的正则表达式

DDOS——分布式DOS攻击

使用大量设备短时间内请求,导致服务器端无法解析正常请求。

  • 利用 TCP 三次握手:只发送第一次 SYN 报文。
  • 负载均衡(识别,拒绝)
  • API网关(识别,拒绝)
  • CDN(抗量)
  • 快速自动扩容(抗量)
  • 非核心业务降级(抗量)

中间人攻击

在浏览器和服务器中间插入一个中间人,中间人间接将浏览器的输入信息恶意构造发给服务器,并将接收到的内容恶意篡改。

  • 明文传输(可以看到)
  • 篡改不可知(不知道被改了)
  • 身份未验证(不知道谁发的)

利用 HTTPS

  • 加密
  • 完整性:同时发送 content 和 hash,接收端需要对比。
  • 不可抵赖:依靠数字签名和 CA。

\