gpt4 book ai didi

android - Uri 和 WebView 类以不同方式解析包含反斜杠的 URL(主机或用户信息)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:35 24 4
gpt4 key购买 nike

使用 URI 时

String myUri = "https://evil.example.com\\.good.example.org/";
// or
String myUri = "https://evil.example.com\\@good.example.org/";

在Android上的Java中,URI的权限部分的主机或用户信息中的反斜杠导致Android的android.net.Uriandroid.webkit.WebView的方式不匹配 解析关于其主机的 URI。

  • Uri 类(和 cURL )对待 evil.example.com\.good.example.org(第一个示例)甚至 good。 example.org(第二个示例)作为 URI 的主机。
  • WebView 类(以及 Firefox 和 Chrome)将 evil.example.com(两个示例)视为 URI 的主机。

这是已知的、预期的或正确的行为吗?这两个类只是遵循不同的标准吗?

看规范,似乎都不是RFC 2396也不RFC 3986允许在用户信息或权限中使用反斜杠。

是否有任何解决方法来确保这里的行为一致,尤其是出于验证目的?以下补丁看起来是否合理(与 WebView 一起使用并确保一般正确性)?

Uri myParsedUri = Uri.parse(myUri);

if ((myParsedUri.getHost() == null || !myParsedUri.getHost().contains("\\")) && (myParsedUri.getUserInfo() == null || !myParsedUri.getUserInfo().contains("\\"))) {
// valid URI
}
else {
// invalid URI
}

一个可能的缺陷是此解决方法可能无法捕获导致解析不一致主机的所有情况。您是否知道导致两个类之间不匹配的其他原因(反斜杠除外)?

最佳答案

已知 Android WebView 4.4 converts some URLs ,在链接的问题中有一些步骤描述了如何防止这种情况发生。如果您的需求是基于该问题或其他原因,您的问题并不完全清楚。

您可以根据字符表中的编号屏蔽反斜杠和其他符号。在 URL 中,数字以十六进制形式书写。

Hexadecimal: 5C
Dezimal: 92
Sign: \

该代码是为 URL 中的每个登录添加一个 % 前缀,您的代码在替换后如下所示:

String myUri = "https://evil.example.com%5C%5C.good.example.org/";
// or
String myUri = "https://evil.example.com%5C%5C@good.example.org/";

可能还需要添加斜杠来分隔域和路径:

String myUri = "https://evil.example.com/%5C%5C.good.example.org/";
// or
String myUri = "https://evil.example.com/%5C%5C@good.example.org/";

是否有可能反斜杠根本不应该用于网络通信,而是用作某些过程的转义,例如正则表达式或用于 JavaScript (Json) 或其他一些步骤的输出?

奖金 ;-)
下面是一个 php 脚本,它为大多数 UTF-8 符号打印一个表格,其中包含相应的十六进制和十进制数字。 (它仍然应该包装在一个 html 模板中,也许包括 css):

<?php
$chs = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
$chs2 = $chs;
$chs3 = $chs;
$chs4 = $chs;
foreach ($chs as $ch){
foreach ($chs2 as $ch2){
foreach ($chs3 as $ch3){
foreach ($chs4 as $ch4){
echo '<tr>';
echo '<td>';
echo $ch.$ch2.$ch3.$ch4;
echo '</td>';
echo '<td>';
echo hexdec($ch.$ch2.$ch3.$ch4);
echo '</td>';
echo '<td>';
echo '&#x'.$ch.$ch2.$ch3.$ch4.';';
echo '</td>';
echo '</tr>';
}
}
}
}
?>

关于android - Uri 和 WebView 类以不同方式解析包含反斜杠的 URL(主机或用户信息),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50734875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com