尝试在ANDROID资源中使用<!ENTITY并出现错误:"实体已被引用,但未被声明."

Ser*_*m's 20 xml dtd android-resources android-studio android-gradle-plugin

我正在按照此解决方案在我的字符串资源文件中使用enetities:

是否可以直接在Android资源XML文件中进行字符串替换?

我在资源树中使用外部文件:/res/raw/entities.dtd,其内容:

<!ENTITY ent_devicename "MyDeviceName">
Run Code Online (Sandbox Code Playgroud)

string.xml资源文件中:

<!DOCTYPE resources [
    <!ENTITY % ent_devicename SYSTEM "../raw/entities.dtd">
    %ent_devicename;
]>

<resources>
    <string name="name">The name is &ent_devicename;</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

实体"ent_devicename"已被引用,但未被声明.

如您所见,Android Studio可识别外部实体文件:

在此输入图像描述

和实体:

在此输入图像描述

有人能提供一个正确的例子来使事情有效吗?我的意思是一个完全可编译的Android Studio项目,在单独的文件中包含实体声明.

更新 好的,如果你更加关注这个w3schools链接:

https://www.w3schools.com/xml/xml_dtd_entities.asp

你看到了解决方案:

外部entities.dtd文件包含

<!ENTITY ent_devicename "MyDeviceName">
Run Code Online (Sandbox Code Playgroud)

那么新的字符串资源资源:

<?xml version="1.0" encoding="utf-8"?>

    <!DOCTYPE resources [
        <!ENTITY ent_devicename SYSTEM "../raw/entities.dtd">
        ]>

<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="Typos">
    <string name="ent_devicenamxxe2">&ent_devicename;</string>
Run Code Online (Sandbox Code Playgroud)

我改变了<!ENTITY % ent_devicename<!ENTITY ent_devicename(不再%)我删除%ent_devicename;

现在它编译但是生成的APK似乎忽略了实体值(使用空字符串).所以问题没有解决!

让我知道!

Che*_*amp 13

TL; DR此功能已从Android Studio中删除.请在此处查看错误报告.

看起来在Android Studio上一次支持XML外部实体.它也让我觉得Android Studio当前应该支持外部实体,因为编辑器没有抱怨XML的底层处理实际上没有按预期包含给出"引用但未声明"的错误.

虽然我还没有找到一个明确提及Android Studio中放弃外部实体,它将使意义,由于这是发现了一个漏洞.请参阅易受XXE攻击数据暴露Android 安全性记录的Android开发人员.

现在也可能以某种方式对外部实体的访问进行门控,但我认为如果是这样的话,Android Studio会更有帮助.由于漏洞,该功能更有可能被删除.

顺便说一句,我已经尝试了其他答案,我没有运气 - 只是同样的错误.

编辑:

我刚刚看到一篇关于JetBrains解决XXE漏洞的媒体帖子.

第二次编辑

我在bug跟踪器上找到了禁用的参考.

出于安全原因,这可能已经被禁用,它需要在解决之前进行完整分析,向3.2发展

在Change-Id:I2f1978bc5458ba2b2b2d6ffbc9df5710c487a4e4中,出于安全原因(防止XXE攻击)确实禁用了此功能.

它的状态是"不会修复预期的行为".如果Studio已被更改为发出错误消息,该设施因安全原因而被禁用,那将是很好的.

  • 您的答案是目前最好的,所以我投了赞成票。感谢您收集的所有信息。所以......不再有外部实体。真可惜! (3认同)

归档时间:

查看次数:

1780 次

最近记录:

5 年,11 月 前