Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
冒号“:`对友好的URL使用安全吗?_Url_Gwt_Special Characters_Friendly Url - Fatal编程技术网

冒号“:`对友好的URL使用安全吗?

冒号“:`对友好的URL使用安全吗?,url,gwt,special-characters,friendly-url,Url,Gwt,Special Characters,Friendly Url,我们正在设计一个URL系统,将应用程序部分指定为用斜杠分隔的单词。具体来说,这是在GWT中,因此URL的相关部分将在哈希中(由客户端的控制器层进行解释): 有些节可能需要附加属性,我们希望使用:指定这些属性,以便URL的节部分是明确的。代码将首先在/上拆分,然后在:上拆分,如下所示: http://site/gwturl#user:45/comments http://site/gwturl#user%3A45/comments <--- BAD 当然,我们这样做是为了url友好,因此

我们正在设计一个URL系统,将应用程序部分指定为用斜杠分隔的单词。具体来说,这是在GWT中,因此URL的相关部分将在哈希中(由客户端的控制器层进行解释):

有些节可能需要附加属性,我们希望使用
指定这些属性,以便URL的节部分是明确的。代码将首先在
/
上拆分,然后在
上拆分,如下所示:

http://site/gwturl#user:45/comments
http://site/gwturl#user%3A45/comments <--- BAD
当然,我们这样做是为了url友好,因此我们希望确保这些具有特殊意义的字符中没有一个是由浏览器或任何其他系统编码的url,并最终得到如下url:

http://site/gwturl#user:45/comments
http://site/gwturl#user%3A45/comments <--- BAD

http://site/gwturl#user%3A45/comments 我不会指望的。许多用户代理可能会将url编码为
%3A

来自
URLEncoder
javadoc:

有关HTML表单的详细信息 编码,请查阅HTML .

对字符串进行编码时,请执行以下操作 规则适用于:

  • 字母数字字符“a” 通过“z”、“A”到“z”和“0” 通过“9”保持不变
  • 特殊字符“.”、“-”、“*”和 “u”保持不变
  • 空间 字符“”被转换为加号 符号“+”
  • 所有其他字符都是 不安全,首先转换为 使用某种编码的一个或多个字节 计划。然后表示每个字节 通过3个字符的字符串“%xy”,其中 xy是两位十六进制 字节的表示形式。这个 建议使用的编码方案是 UTF-8。但是,为了兼容性 原因,如果编码不正确 指定,然后使用默认编码 使用了平台的一部分

也就是说,
不安全。

冒号不安全

我没有看到Firefox或IE8对某些包含该字符的Wikipedia进行编码。

它不是一个安全的字符,当它位于您的域名之后时,用于区分您连接的端口。

我最近使用了一个URL编码器,所以这在我的脑海中是非常新鲜的

http://site/gwturl#user:45/comments

user:45/comments
)中的所有字符对于URI都是完全合法的

报告的相关部分:

除了这些限制之外,片段部分除了应用程序提供的结构之外,没有定义的结构。http方案只表示不将此部分发送到服务器


编辑:

尽管我有关于URI规范的断言,但当HTML4规范限制元素名/标识符时,它提供了正确的答案


请注意,标识符规则是。URI限制仍将适用(在撰写本文时,HTML5使用URI存在一些未解决的问题)。

如果协议需要身份验证,则使用冒号作为用户名和密码之间的分隔符。

除了McDowell对URI标准的分析外,还请记住片段必须是有效的HTML锚名称。据

ID和名称标记必须以 字母([A-Za-z]),并可遵循 通过任意数量的字母、数字 ([0-9]),连字符(“-”),下划线 (“)、冒号(“:”)和句点 (“)

所以你很幸运。“:”是显式允许的。任何人都不应该“%”逃逸它,不仅因为“%”在那里是非法字符,而且因为片段必须逐字符匹配锚点名称,因此任何代理都不应该试图以任何方式篡改它们


然而,你必须测试它。Web标准没有得到严格遵守,有时标准之间存在冲突。例如,HTTP/1.1 RFC 2616不允许在请求URL中使用查询字符串,而HTML在使用GET方法提交表单时会构造一个查询字符串。无论在现实世界中实现哪一个,最终都会获胜。

MediaWiki和其他wiki引擎在URL中使用冒号来指定名称空间,显然没有什么大问题


例如,谷歌也使用冒号


在中,它们使用冒号作为自定义方法名。

@arbales:Yes。一些不太兼容的用户代理会保留不兼容的URL。Opera也保留分号,但指望这种行为对doRenesis来说不是一件好事。doRenesis谈论的是URL片段,而不是URL路径。写这个问题时,Wikipedia是我的想法之一。那么,它使用冒号在技术上是否无效/不安全?我经常在维基百科中看到(和)编码的URL,但从来没有冒号,这让我有点困惑。回溯机器在它的许多链接中都有一个:例如,我想你知道一些事情,你能进一步解释一下吗?不将其发送到服务器不是问题,因为我们正在使用GWT。我只是不确定我是否清楚你引用的部分所指定的语法。但是
是一个gen-delim,而不是sub-delim。分号对于pchar是合法的,所以无论它是sub-delim还是gen-delim都不是一个issue@bobince-
位于
pchar
中,它位于
片段中,因此允许使用
@Renesis-维基百科有一篇关于ABNF的文章,你基本上是在看一个允许字符的列表,其中
/
表示或。我没有做过任何GWT编程,所以我不知道它是如何使用URI的片段部分的?这是否意味着浏览器应该/将忽略(跳过编码)片段中的
?也许(更清楚地)指定您只在客户端使用URL是个好主意?因为很多答案(我的答案也是一样)似乎都假设您将使用HTTP将URL发送到服务器。经过编辑,添加了在客户端使用片段的说明。我很好奇:10个月后,这个URL方案对您有效吗?我正在考虑用同样的