Base64编码在Web安全中的常见用途
TOPIC SOURCE
Bugku-cookie欺骗
在Web防御的细枝末节里,Base64常被当作“隐形的传送门”。它并不提供加密,只是把二进制数据映射成可打印字符,恰好满足URL、JSON、Cookie等载体的字符限制。于是,攻击者和防御者都将它嵌入各类参数中,以实现“看不见却能被解析”的目的。
Base64的技术本质
Base64采用6位一组的分割方式,将每3个字节转化为4个可显示字符。因为字符集仅包含字母、数字和“+”“/”,再配合URL安全变体(将“+”“/”分别替换为“-”“_”),它几乎可以在任何文本流中无缝嵌入。对比真正的加密算法,它的计算成本几乎可以忽略不计,这也是它在高频请求中被频繁使用的根本原因。
常见安全场景
- HTTP Basic Auth头部的凭证通常以Base64形式出现,未加密的用户名密码在抓包后直接可读。
- JWT的Header与Payload都是Base64Url编码,攻击者常利用这一步骤隐藏恶意声明。
- 在GET请求的查询字符串中,文件名、回调函数名等敏感参数会被Base64包装,以规避过滤规则。
- Cookie或本地存储的会话标识经Base64混淆后再写入,导致审计日志中出现“乱码”,但实际是明文信息。
- WebShell常把恶意代码块Base64化后通过eval、base64_decode等函数动态执行,形成“一次性”攻击。
实战示例:参数绕过
<?php
$fn = base64_decode($_GET['file'] ?? '');
if (in_array($fn, ['config.php','data.txt'])) {
echo file_get_contents($fn);
}
?>
若攻击者将file参数设为aGVsbG8ucGhw(即“hello.php”),服务器会直接读取该文件。防御方若仅检查文件名白名单,却忽略了Base64解码前的字符合法性,便会被轻易绕过。实际防御建议在解码后立即对路径做规范化(realpath)并限制根目录范围。

参与讨论
这玩意儿经常在请求头里见到,但一直没搞懂具体怎么用。
感觉像是给数据穿了个马甲,其实还是裸奔。
之前在项目里用过,传图片什么的确实方便。
那如果攻击者用base64把恶意脚本藏起来,防火墙能发现吗?
看完还是有点懵,有没有更简单的例子?
所以这玩意就是个编码工具,根本不算加密对吧?
之前抓包看到过一堆乱码,原来是base64搞的鬼。
用这个传敏感信息也太危险了,跟没穿衣服一样。
能不能讲讲怎么检测和防御这种攻击?