可以在网址中安全使用哪些特殊字符?

评论

询问在URL中使用哪些不安全的特殊字符会更快,更容易(根据下面的Andreas Bonini的回答)。

询问不安全之处很难回答:任何非ASCII字符都必须进行百分比编码。

@neo:不,不是:O

#1 楼

安全字符是a-z,A-Z,0-9和_-(下划线和减号),除了用于参数的保留字符之外。

其他字符在一定程度上会带来问题。例如:如果一个参数是数组?param=array[content],即会显示一个带有方括号url编码的url,它看起来很丑陋,无法指示。

但是问题不仅在于丑陋,可以说您有一个带有jpg的字符,在字符旁边有一个安全的字符,很多时候浏览器将无法下载得到404的代码。这是一个问题较旧的浏览器和某些移动浏览器。

如何进行测试?


在许多访问者的公共页面名称中放入一堆带有您要测试的字符的图像/ js / css
使404页面发送给您一封电子邮件每次收到成功

我有一个收件箱,里面有14000封电子邮件证明了我的观点。

评论


好吧,我会说“非常安全的字符”而不是“安全的字符”-规范允许更多,但我同意您的观点,在此最好保守一点。

–杰夫·阿特伍德
2010年7月11日,3:30

月经有什么问题?

– BlueWhale
2012年6月7日在20:28

#2 楼

以下字符在URL的路径部分中具有特殊含义(路径部分是'?'之前的所有内容):

  ";" | "/" | "?"


字符在URL的查询部分(“?”之后的所有内容)具有特殊含义。因此,如果它们在“?”之后您需要对其进行转义:

  ":" | "@" | "&" | "=" | "+" | "$" | ","


有关更深入的说明,请参阅RFC。

评论


当然,为了清楚起见,这个答案与问题相反。这个问题要求哪些字符是安全的,而不是哪些字符是不安全的。由于很难可靠地回答原始问题,因此应该对问题进行编辑,使其反过来再与之匹配。

–马克·哈顿
2010年7月9日在13:49

#3 楼

当然,当我像大多数人一样在Google上搜索“ URL安全字符”时,首先弹出这个问题。我认为对一个简洁的问题提出一个直接的答案是值得的。从马的RFC2396到我的意思是提摩西爵士的嘴:


2.3. Unreserved Characters

   Data characters that are allowed in a URI but do not have a reserved
   purpose are called unreserved.  These include upper and lower case
   letters, decimal digits, and a limited set of punctuation marks and
   symbols.

      unreserved  = alphanum | mark

      mark        = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"

   Unreserved characters can be escaped without changing the semantics
   of the URI, but this should not be done unless the URI is being used
   in a context that does not allow the unescaped character to appear.



可以理解为先前在同一标准的第1.6节中定义的:


小写和大写的旧ASCII-7拉丁字符AZ,十进制数字09以及在语法中的mark生成规则中明确列举的少数非字母数字。 2.3。


如果要理解有关HTTP / HTTPS URL的问题(请注意RFC2396定义URI),则将RFC2396语法的语义处理作为HTTP [的资源定位符] S]协议目前已由RFC7230,Sec。标准化。 2.7。但是,从RFC7230 Sec中未对它们进行特殊处理的观察,可以推断出“ URL安全”字符集大于RFC2396定义的字符集。 2.7并非是面向未来的举措;将来可能进行的RFC7230更新可能会将语义归因于“ URL安全” RFC2396集之外的更多字符,从而使这种推论在现状上无效。
面向未来的方法将RFC2396中定义的URL安全字符集视为最大可能且不可扩展的方法,并且不按照RFC7230当前可用/安全/非特殊的字符扩展它:这可能会改变。相反,RFC2396集不能。

#4 楼

这里的答案很好,但我认为还有一个例外值得一提-非英语字符。如果在DNS中正确编码了像ñ(在Español中一样)之类的字符,则它们是完全合法的。

您必须在DNS中使用Punycode才能使其解析为现代浏览器(español的条目是xn--espaol-zwa),但是现在,这些浏览器在域名中使用非常安全,因为非英语国家的用户也很容易输入它们。

#5 楼

RFC 2396实际上已过时,并已由RFC 3986取代。
未保留的特殊字符(无需编码即可安全使用)(字母和数字除外)为:
- . _~