开发者以为开了安全开关就高枕无忧?一个XML转换库的漏洞告诉我们: sanitization(净化处理)可能只防了一半。
这个漏洞藏在xml2json的toXml()函数里。该函数有个sanitize选项,开发者开启后以为能防止XML注入攻击。但问题在于——净化只针对属性值和文本内容,标签名和属性名完全不在保护范围内。
![]()
攻击者不需要碰值,只要控制JSON的键名就能动手脚。比如把键名写成foo="x">bar,输出的XML结构就被篡改了。sanitize开关开着也没用,因为它根本不检查键名。
三类应用最危险:一是接收用户控制JSON键的动态XML构建工具;二是调用了toXml(userJson, { sanitize: true })并信任其输出安全的系统;三是把生成的XML直接渲染到浏览器或传给下游解析器的场景。下游一旦解析了被污染的XML,XSS或更严重的攻击就可能发生。
这个漏洞的讽刺之处在于:安全选项的存在反而制造了虚假的安全感。开发者看到sanitize: true就以为万事大吉,却没意识到攻击面在键名这个盲区。
修复方向很明确——要么把键名也纳入净化范围,要么在文档里用大红字警告:此sanitize不防键名注入。但在此之前,依赖这个选项的系统都值得重新审计一遍。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.