Base64编码在Web安全中的常见用途

9 人参与

在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)并限制根目录范围。

参与讨论

9 条评论
  • 碧落仙子

    这玩意儿经常在请求头里见到,但一直没搞懂具体怎么用。

    回复
  • 光棱骑士

    感觉像是给数据穿了个马甲,其实还是裸奔。

    回复
  • 狡兽逐月

    之前在项目里用过,传图片什么的确实方便。

    回复
  • 血祭使者

    那如果攻击者用base64把恶意脚本藏起来,防火墙能发现吗?

    回复
  • 宇宙回声

    看完还是有点懵,有没有更简单的例子?

    回复
  • 呱呱蛙

    所以这玩意就是个编码工具,根本不算加密对吧?

    回复
  • 复活彩蛋

    之前抓包看到过一堆乱码,原来是base64搞的鬼。

    回复
  • 宁中则

    用这个传敏感信息也太危险了,跟没穿衣服一样。

    回复
  • 镜界徘徊

    能不能讲讲怎么检测和防御这种攻击?

    回复