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已被更改为发出错误消息,该设施因安全原因而被禁用,那将是很好的.
| 归档时间: |
|
| 查看次数: |
1780 次 |
| 最近记录: |