程序员征服安全:分享与学习系列 - XML 注入

XML 注入攻击是黑客发明的一种棘手的漏洞,旨在破坏托管 XML 数据库的系统。这包括人们在想到传统数据库时会联想到的各种内容——从药品到电影,涵盖了各种详细的信息存储。一些 XML 数据存储还用于验证授权用户,因此向其中注入新的 XML 代码可以创建出新的用户,而主机系统此后会认可这些用户。
攻击者要实施 XML 注入,前提是必须存在一个依赖于 XML 数据库或至少能访问该数据库的应用程序。只要满足这一条件,且用户输入未经过妥善验证,新的 XML 代码就可能被添加到数据存储中。根据攻击者的技术水平,添加新的 XML 代码可能会造成严重破坏,甚至提供对整个数据库的访问权限。
在阅读过程中,您可能会发现 XML 注入与我们之前介绍的 SQL 注入攻击密切相关。这是因为尽管它们针对的是不同类型的数据库,但原理极其相似。幸运的是,它们的修复方法也大同小异。学会如何击败其中一种攻击,将使您在防范另一种攻击时占据先机。
在本期节目中,我们将学习:
- XML 注入的工作原理
- 为什么它们如此危险
- 如何部署防御措施以彻底阻止它们。
攻击者如何触发 XML 注入?
只要未经授权的用户能够编写 XML 代码并将其插入到现有的 XML 数据库中,XML 注入就会成功。这只需要两个条件:一个依赖于或连接到 XML 数据库的应用程序,以及一个供攻击者发起攻击的不安全数据路径。
如果用户输入在发送到服务器进行处理之前未经过滤或限制,XML 注入几乎总是会成功。这使得攻击者能够在正常查询字符串的末尾编写或注入他们自己的代码。如果成功,服务器会被诱骗执行这些 XML 代码,从而允许攻击者添加或删除记录,甚至泄露整个数据库。
黑客通过将 XML 代码添加到正常查询中来实施 XML 注入攻击。这可以是搜索字段、登录页面,甚至包括 Cookie 或标头等内容。
例如,在注册表单中,用户可能会在用户名或密码字段后添加以下代码:
<user></user>
<role>administrator</role>
<username>John_Smith</username><password>Jump783!Tango@12</password>
在此示例中,将创建一个名为 John_Smith 的新用户,并赋予其管理员权限。至少这位新用户采用了良好的密码强度规则。可惜他们实际上是一名攻击者。
黑客并不一定非要通过这种方式才能成功实施 XML 注入。通过操纵查询并记录服务器返回的各种错误消息,他们可能能够摸清 XML 数据库的结构。而这些信息可用于增强其他类型的攻击。
为什么 XML 注入如此危险?
XML 注入攻击的危险程度取决于目标 XML 数据库中存储的信息,以及这些信息的使用方式。例如,如果 XML 数据库用于用户身份验证,XML 注入可能会让攻击者获得系统访问权限。它甚至可能允许他们成为目标网络上的管理员,这显然是非常危险的情况。
对于针对传统数据库的 XML 注入,其危险在于信息被窃取、数据存储中被添加错误数据,或者重要数据被覆盖。XML 代码并不难学,其中一些命令功能极其强大,可以覆盖整个信息字段,甚至显示数据存储的全部内容。
通常,人们构建数据库都是因为其中存储的信息具有价值。黑客深知这一点,这就是他们经常将其作为目标的原因。如果这些数据包含员工或客户的个人信息,一旦泄露,可能会导致声誉受损、经济损失、巨额罚款甚至法律诉讼。
防御 XML 注入攻击
由于 XML 注入攻击门槛较低且 XML 数据库应用广泛,此类攻击相当常见。但这类攻击已存在多年,因此,目前已有多种行之有效的防御手段,可以彻底杜绝此类攻击。
防御此类攻击的最佳方法之一是设计仅使用预编译 XML 查询的应用程序。这会将查询功能限制在授权的活动子集内。任何带有额外参数或与预编译查询功能不匹配的指令都将无法执行。如果您不想采取如此严格的限制,也可以使用参数化。这会将用户输入限制为特定类型的查询和数据(例如仅限整数)。任何超出这些参数的内容都将被视为无效,并导致查询失败。
将预编译或参数化查询与自定义错误消息结合使用也是一个好主意。应用程序不应返回查询失败时默认的描述性错误消息,而应拦截这些响应并将其替换为更通用的消息。理想情况下,您应告知用户查询失败的原因,但不要透露任何有关数据库本身的信息。如果您将这些自定义消息限制在少数几种选择内,黑客将无法从失败的查询中收集到任何有用的侦察信息。
XML 注入在刚出现时曾非常猖獗。但鉴于其历史已久,如今我们完全可以轻松构建出无法被攻破的防御体系。
关于 XML 注入的更多信息
如需深入了解,您可以查看 OWASP 关于 XML 注入的报告。您还可以通过 Secure Code Warrior 平台的免费演示来测试您新掌握的防御知识,该平台旨在培训网络安全团队成为顶尖的网络战士。如需了解更多关于攻克此漏洞及其他各类威胁的信息,请访问 Secure Code Warrior 博客。
在 AI 驱动的开发成果发布前实现有效治理
评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。
探索更多博客
获取有关安全编码、人工智能治理和软件风险管理的专家内容。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
在产品发布前确保 AI 驱动的开发安全
洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。



.avif)