跳转至

URL 与 Web 架构

URL 与 Web 架构

本章导读:本章解析 URL 的完整结构、编码规则、协议基础,以及 Web 系统的典型架构模式(单体、分层、微服务、Serverless),从架构视角分析安全设计原则。

URL 结构详解

URL(Uniform Resource Locator,统一资源定位符)是互联网上资源的唯一地址,其结构如下:

https://user:pass@www.example.com:8080/path/to/resource?name=value&foo=bar#section
\___/   \_______/ \_____________/ \___/\________________/ \_______________/ \______/
 协议     认证信息       域名         端口        路径              查询参数         锚点

各组成部分详解

组件 说明 安全测试关注点
协议(Scheme) 访问资源的方式:httphttpsftpfilemailtojavascriptdata 非标准协议(javascript:data:)可用于 XSS;协议降级可导致 MITM
认证信息 用户名和密码(user:pass@),已废弃,存在安全风险 凭证泄露在 URL 中(日志、Referer、浏览器历史)
域名(Host) 域名或 IP 地址,标识服务器位置 域名相似性钓鱼(examp1e.com 仿冒 example.com)、IDN 同形异义字攻击
端口(Port) 服务程序的逻辑地址。HTTP 默认 80,HTTPS 默认 443,可省略 非标准端口(8080、3000、8000 等)可能运行开发/调试服务,攻击面大
路径(Path) 资源在服务器上的位置。可能是真实文件,也可能是路由映射 路径遍历(../)、敏感路径暴露(/.git//.env/admin
查询参数(Query String) ?key=value&key2=value2 格式,传递给服务器的参数 参数篡改、SQL 注入、XSS、开放重定向、敏感信息泄露
锚点(Fragment) #section,仅客户端使用,不发送到服务器 DOM 型 XSS 常利用锚点注入(#<script>alert(1)</script>

URL 与 URI、URN 的关系

  • URI(Uniform Resource Identifier):统一资源标识符,标识资源的字符串,包含 URL 和 URN

  • URL(Uniform Resource Locator):统一资源定位符,不仅标识资源,还说明如何定位(协议 + 地址)

  • URN(Uniform Resource Name):统一资源名称,仅标识资源名称,不包含定位信息,如 urn:isbn:0451450523

URL 编码与安全

百分号编码(Percent-Encoding)

  • URL 中保留字符(如 ?&=#%/)和非 ASCII 字符需要进行编码

  • 编码规则:% + 两位十六进制表示字符的 ASCII/UTF-8 字节值

  • 常见编码:

  • 空格 → %20(或 +,仅在 application/x-www-form-urlencoded 中)

  • &%26

  • =%3D

  • ?%3F

  • #%23

  • <%3C

  • >%3E

  • "%22

  • '%27

  • 安全测试意义:

  • 双重编码绕过%253C% 编码为 %25< 编码为 %3C)可绕过某些 WAF 的过滤规则

  • Unicode 编码绕过:使用 UTF-8 多字节编码(如 %C0%AE 表示 .)绕过路径遍历过滤

  • URL 编码混淆%00(空字节)在某些语言(如 PHP)中截断字符串,绕过后缀检查(如 shell.php%00.jpg

IDN(Internationalized Domain Name,国际化域名)与同形异义字攻击

  • IDN 允许域名使用非 ASCII 字符(如中文域名 例子.测试),通过 Punycode 编码转换为 ASCII 兼容格式(xn--fsq092h.xn--0zwm56d

  • 同形异义字攻击(Homograph Attack):使用 Unicode 中与 ASCII 字符外观相似的字符注册域名。例如:

  • 西里尔字母 а(U+0430)与拉丁字母 a(U+0061)外观相同

  • 注册 аррӏе.com(使用西里尔字母)仿冒 apple.com

  • 浏览器防御:显示 Punycode 而非 Unicode(当域名包含混合脚本时),但攻击者可通过全西里尔字母域名绕过

常见协议详解

HTTP/HTTPS

  • HTTP(HyperText Transfer Protocol):明文传输,默认端口 80

  • HTTPS(HTTP over TLS/SSL):加密传输,默认端口 443,通过 TLS 握手建立加密通道

  • 安全测试关注点:HTTP 明文传输敏感信息、HSTS 缺失、TLS 配置弱点、SSL 剥离攻击

FTP(File Transfer Protocol)

  • 用于文件传输,默认端口 21(控制连接)和 20(数据连接)

  • 明文传输认证信息(用户名/密码),存在被动模式(PASV)和主动模式(PORT)

  • 安全测试关注点:匿名 FTP 访问(anonymous/anonymous)、目录遍历、明文凭证嗅探、FTP 反弹攻击(利用 PORT 命令让服务器连接指定 IP:端口)

FILE 协议

  • 访问本地文件系统,格式 file:///C:/Windows/System32/drivers/etc/hosts

  • 安全测试关注点:浏览器中通过 file:// 协议访问本地文件(某些场景下 XSS 可利用);SSRF 中 file:///etc/passwd 读取本地文件

自定义协议

  • 应用程序可注册自定义协议处理程序,如 ed2k://thunder://weixin://alipays://

  • 安全测试关注点:自定义协议处理程序可能存在命令注入(如 custom://exec?cmd=whoami);通过网页诱导调用本地应用协议执行非预期操作

JAVASCRIPT 协议

  • javascript: 伪协议在浏览器地址栏或链接中执行 JS 代码

  • 安全测试关注点:javascript:alert(document.cookie) 可用于 XSS;javascript:void(0) 常用于占位链接

DATA URI

  • 将数据直接嵌入 URL 中,格式 data:[<mediatype>][;base64],<data>

  • 示例:data:text/html,<script>alert(1)</script>data:image/png;base64,iVBORw0KGgo...

  • 安全测试关注点:Data URI 可用于绕过 CSP(内联脚本)、构造无外部请求的 XSS、钓鱼页面(所有内容在一个 URL 中)

Web 架构核心概念

WWW(World Wide Web,万维网)

  • WWW = HTTP + URL + HTML + 浏览器 + Web 服务器

  • 由 Tim Berners-Lee 于 1989 年在 CERN 提出,是互联网(Internet)上最广泛使用的信息服务系统

  • 注意区分:Internet 是物理网络基础设施,WWW 是运行在 Internet 之上的应用层服务

C/S 架构(Client/Server,客户端/服务器架构)

  • 客户端向服务器发起请求,服务器处理并返回响应

  • 特点:客户端需安装专用软件(如 QQ 客户端、游戏客户端),功能强大但维护成本高

  • 安全测试关注点:客户端逆向分析(反编译、抓包)、通信协议分析、本地数据篡改

B/S 架构(Browser/Server,浏览器/服务器架构)

  • 基于 Web 的 C/S 变体,客户端统一为浏览器,无需安装专用软件

  • 特点:跨平台、易维护、易部署,但受浏览器能力限制

  • 安全测试关注点:与 Web 安全测试完全一致(XSS、CSRF、SQL 注入等)

P2P 架构(Peer-to-Peer,点对点架构)

  • 无中心服务器,各节点(Peer)直接通信,互为客户端和服务器

  • 典型应用:BitTorrent、区块链、IPFS、Skype(早期)

  • 安全测试关注点:节点身份验证、DHT 污染攻击、Sybil 攻击(伪造大量节点控制网络)、Eclipse 攻击(隔离目标节点)

URL 安全测试关联点

  • 开放重定向(Open Redirect)

  • 服务器将用户重定向到 URL 参数指定的地址,未校验目标域名,导致钓鱼攻击

  • 示例:https://example.com/redirect?url=https://evil.com

  • 绕过技巧:使用 //evil.com(协议相对 URL)、\\evil.com(Windows 路径风格)、https://example.com.evil.com(子域名欺骗)、javascript:alert(1)(JS 协议)

  • 防御:白名单校验重定向目标、使用内部映射表(redirect?id=1 映射到预定义 URL)

  • SSRF(Server-Side Request Forgery,服务器端请求伪造)

  • 服务器根据用户提供的 URL 发起请求,攻击者利用此机制让服务器访问内部资源

  • 攻击目标:http://127.0.0.1(本地服务)、http://169.254.169.254(云元数据服务,获取临时凭证)、http://internal-api(内部 API)、file:///etc/passwd(本地文件读取)

  • 绕过技巧:

    • IP 编码绕过:0177.0.0.1(八进制)、2130706433(十进制)、0x7f000001(十六进制)、127.1(省略)

    • DNS 重绑定:利用 TTL 让服务器先解析到合法 IP,再解析到内网 IP

    • 302 跳转:让服务器访问受控域名,返回 302 跳转到内网地址

    • 协议混淆:dict://gopher://ftp://ldap:// 等非 HTTP 协议

  • 防御:URL 白名单、禁用非必要协议、内网 IP 黑名单、统一代理出口、DNS 解析后二次校验

  • 工具:SSRFmap、Gopherus(生成 Gopher 协议 Payload)、Burp Collaborator

  • URL 混淆与钓鱼

  • 利用 URL 的复杂性欺骗用户,如 https://www.example.com@evil.com@ 后才是实际域名)

  • 利用子域名:https://www.example.com.evil.com

  • 利用 IDN 同形异义字:https://аррӏе.com(西里尔字母仿冒 apple)

  • 利用超长域名或路径隐藏真实域名:https://evil.com/very/long/path/that/pushes/the/real/domain/off/screen?redirect=https://example.com

  • 协议走私(Protocol Smuggling)

  • 利用前端代理和后端服务器对协议解析的差异,将一个协议的请求走私为另一个协议

  • 例如:HTTP 请求走私(利用 Content-Length vs Transfer-Encoding 解析差异)

  • 或利用 Upgrade: websocket 将 HTTP 连接升级为 WebSocket,绕过某些安全检测