防止编码URI两次

时间:2012-10-10 01:19:49

标签: url uri

我正在尝试编写一个编码URI的函数,以使它们符合rfc 3986

即。检查除了alphanum之外的每个角色; /?:@&=+$-_.!~*'()|\^[]``#替换为%[hex octet]

我想确定如果使用已编码的URI调用该函数,代码将不会破坏它。

到目前为止,我所做的只是寻找一个'%'符号,然后是2个八位字符。我发现我替换的任何其他保留字符。

我应该做其他检查吗?

不介意安全问题;他们正在其他地方处理。

2 个答案:

答案 0 :(得分:1)

我认为正确编码的URI应该总是第二次干净利落地通过。

原因是您无论如何都必须正确解析URI,因为在URI中使用/ @ . : ? & =等字符是完全合法的,前提是它们出现在正确的位置。

所以你只编码一个字符,如果它在URI的那部分不合法。通过该断言,您可以创建一个在每个位置都合法的编码字符串,因此当您解析它时,没有任何内容可以编码。

请记住,如果某人向您抛出一个URI进行编码并且它恰好是不明确的(它包含改变URI语法的特殊字符),他们就不能指望正确的结果。

为了更直接地回答你的问题,我会说是的:鉴于上述所有情况,你只需对%转义序列进行特殊处理。

答案 1 :(得分:0)

嗯,你怎么知道已编码的URI不应该再次编码?也许URI包含,我不知道,示例如何编码URI,如果不再进行第二次编码,那么解码会破坏它吗?

也就是说,您可以检查是否只有允许的字符加上%,以及每个%后面是否都是十六进制数字。如果是,则很有可能(但不能保证)编码已经完成。