开发安全之:XML Injection

这篇具有很好参考价值的文章主要介绍了开发安全之:XML Injection。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Overview

responsemsg() 方法将处理未经验证的 XML 输入。此调用可能允许攻击者将任意元素或属性注入 XML 文档的正文中,导致 Denial of Service 或泄漏敏感信息。XML Injection 之所以不同于 XML External Entity (XXE) Injection,是因为攻击者通常会控制插入到 XML 文档中部或末尾的输入。

Details

XML injection 会在以下情况中出现:

1. 数据从一个不可信赖的数据源进入程序。

2.数据写入到 XML 文档或解析为 XML。 在这种情况下,XML 将传递到  simplexml_load_string()。 应用程序通常使用 XML 来存储数据或发送消息。当 XML 用于存储数据时,XML 文档通常会像数据库一样进行处理,而且可能会包含敏感信息。XML 消息通常在 web 服务中使用,也可用于传输敏感信息。XML 消息甚至还可用于发送身份验证凭据。

如果攻击者能够写入原始 XML,则可以更改 XML 文档和消息的语义。危害最轻的情况下,攻击者可能会插入无关的标签,导致 XML 解析器抛出异常。XML injection 更为严重的情况下,攻击者可以添加 XML 元素,更改身份验证凭据或修改 XML 电子商务数据库中的价格。还有一些情况,XML injection 可以导致 cross-site scripting 或 dynamic code evaluation。

示例 1: 假设攻击者能够控制下列 XML 中的 shoes。
 

<order> <price>100.00</price>

<item>shoes</item>

</order>

现在假设,在后端 Web 服务请求中包含该 XML,用于订购一双鞋。假设攻击者可以修改请求,并将 shoes 替换成

shoes</item><price>1.00</price><item>shoes。

新的 XML 如下所示:
 

<order>

<price>100.00</price>

<item>shoes</item>

<price>1.00</price>

<item>shoes</item>

</order>

当使用 XML 解析器时,第二个 <price> 标签中的值将会覆盖第一个 <price> 标签中的值。这样,攻击者就可以只花 1 美元购买一双价值 100 美元的鞋。 如果攻击者控制了已解析 XML 文档的前部或全部内容,则可能会发生这种攻击的一种更严重的形式,称为 XML External Entity (XXE) Injection。

示例 2:下面是一些易受 XXE 攻击的代码: 假定攻击者能控制以下代码的输入 XML: ... <?php $goodXML = $_GET["key"]; $doc = simplexml_load_string($goodXml); echo $doc->testing; ?> ... 现在假设攻击者将以下 XML 传递到Example 2 中的代码: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]><foo>&xxe;</foo> 在处理此 XML 时,将使用系统 boot.ini 文件的内容填充 <foo> 元素的内容。攻击者可能会利用返回到客户端的 XML 元素来窃取数据或获取有关网络资源是否存在的信息。

Recommendations

在将用户提供的数据写入 XML 时,请遵循以下准则:

1.不要使用从用户输入派生的名称创建标签或属性。

2.写入到 XML 之前,先对用户输入进行 XML 实体编码。

3. 将用户输入包含在 CDATA 标签中。 当将用户提供的数据写入 XML 或解析未经验证的 XML 时,为了缓解 XML External Entity (XXE) Injection,您可以使用以下选项:

1.通过所用的 XML 解析器禁用实体扩展。

libxml_disable_entity_loader(true);

or

$dom->resolveExternals=false;

2.写入到 XML 之前,先对用户输入进行 XML 实体编码。

3. 如果需要实体扩展,则应:

a. 对输入进行验证,以确保扩展实体没有问题并允许使用。

b. 限制该解析器在加载 XML 时可以执行的功能:

$doc = XMLReader::xml($badXml,'UTF-8',LIBXML_NONET);文章来源地址https://www.toymoban.com/news/detail-813755.html

到了这里,关于开发安全之:XML Injection的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 屏幕适配资源xml的配置方法

    在 Android 中进行屏幕适配是确保应用在不同设备上正常显示的重要步骤之一。资源文件夹的配置是实现屏幕适配的关键之一,以下是一些常见的资源文件夹配置方法,以适应不同屏幕尺寸和密度。 不同屏幕尺寸的适配: res/layout :通常存放默认的布局文件。 res/layout-sw600dp :

    2024年02月12日
    浏览(37)
  • Android strings.xml按照key修改

    将两个Android项目中的多语言字符串文件(strings.xml)进行比较,如果其中一个项目中包含另一个项目没有的字符,则合并到单一的输出文件,并以 key 在原始 XML 文件中更新 value 值。如果key匹配不准确则忽略它。 具体来说: 引入 re, xml.etree.ElementTree 和 argparse 模块。 定义命令

    2024年02月07日
    浏览(38)
  • Android 读取excel(支持 xls)和 xml

    一、使用jxl 读取excel文件 1.build.gradle的dependencies中加入  2.将xls文件复制到assets文件夹 3.读取文件内容: 二、使用XmlPullParser读取xml文件 1.将xml文件复制到assets文件夹 2.读取文件内容: 完整的FileUtil工具类:

    2024年02月13日
    浏览(38)
  • 开发安全之:JSON Injection

    Overview 在 XXX.php 的第 X 行中,responsemsg() 方法将未经验证的输入写入 JSON。攻击者可以利用此调用将任意元素或属性注入 JSON 实体。 Details JSON injection 会在以下情况中出现: 1. 数据从一个不可信赖的数据源进入程序。 2. 将数据写入到 JSON 流。 在这种情况下,由 XXX.php 的第 X

    2024年01月21日
    浏览(28)
  • 开发安全之:SQL Injection

    Overview 调用通过不可信赖的数据源输入构建的 SQL 查询 mysql_query()。通过这种调用,攻击者能够修改语句的含义或执行任意 SQL 命令。 Details SQL injection 错误在以下情况下发生: 1. 数据从一个不可信赖的数据源进入程序。 2. 数据用于动态地构造一个 SQL 查询。 这种情况下,数据

    2024年01月23日
    浏览(46)
  • Android:ImageView xml方式配置selector 图片切换

    1、在 res/drawable 目录下创建一个新的XML文件,比如 selector_image.xml ?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"? selector xmlns:android=\\\"http://schemas.android.com/apk/res/android\\\" !-- 背景选择器 state_pressed  按下 state_focused 获得焦点 默认 图片 --     item android:state_pressed=\\\"true\\\" android:drawable=\\\"@drawable/image_pressed\\\"

    2024年02月15日
    浏览(46)
  • Android Studio中布局文件.xml不出现代码提示

    所遇问题:如图所示(学习Android中发现写布局文件代码时没有代码提示) 我的解决方法:查看很多博主写的方法,然后试了很多方法,然后找到了适合自己的方法。   1.首先左上角点击File-----找到Project Stucture----Modules-----找到右边没有出现代码的模块(例如我的是chapter2_li

    2024年04月28日
    浏览(36)
  • Android 在xml 布局中如何嵌套 Jetpack Compose

    最近在项目开发的过程中需要用到 Jetpack Compose,之前没有接触过Compose,所以项目一直没有用到Compose。通过查看官网发现Compose上手比较快,但是准备比较复杂的布局要转换成Compose 不是一件容易的事情。那有没有可能只是对成熟的项目中的xml 布局中的某一部分进行改造,让其

    2024年04月10日
    浏览(46)
  • Android 从其他xml文件中获取View组件数据

    问题 Android Studio 我想在 trace.java 从setting.java绑定的页面activity_setting.xml中 的editview中获取数据 解决方案 仅适用于 在同一应用的不同组件之间共享数据 在 SettingActivity.java 中,当用户准备离开当前活动时,可以将 EditText 中的数据保存到一个全局变量或者共享的存储位置。常见

    2024年02月14日
    浏览(47)
  • Android studio 新建的项目中xml不提示了

    新安装的as或者新建的项目中,打开xml编辑,突然发现没有代码提示了,有的朋友就认为as出问题了,或者新建项目不对,gradle等问题,其实这个问题就是您的版本complieSdkVersion和buildToolsVerison版本不一致导致的,把版本调整一下重新编译即可。     另外如果您版本一致,还是

    2024年02月08日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包