2010-11-08 64 views
1

从笨config.php文件:@ URL中允许的字符,是否危险?

/* 
|-------------------------------------------------------------------------- 
| Allowed URL Characters 
|-------------------------------------------------------------------------- 
| 
| This lets you specify with a regular expression which characters are permitted 
| within your URLs. When someone tries to submit a URL with disallowed 
| characters they will get a warning message. 
| 
| As a security measure you are STRONGLY encouraged to restrict URLs to 
| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_- 
| 
| Leave blank to allow all characters -- but only if you are insane. 
| 
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!! 
| 
*/ 
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; 

难道是安全的,我到@字符添加到允许的字符这个名单?有什么风险?

感谢

+0

这是'%'而不允许的。 – Gumbo 2010-11-08 07:32:29

+0

@Gumbo,应该允许 - 再次阅读代码注释。 – 2010-11-08 07:34:04

+0

@ J-16 SDiZ:所以'foo%〜bar'被允许但显然无效。 – Gumbo 2010-11-08 07:37:09

回答

1

它没有列在这里,以防止此类网址的名单:

http://[email protected]/ 

这将去hacker.com虽然看起来像mybank.com随便苏联。

+0

'/'也没有列出。 – Gumbo 2010-11-08 07:37:38

+0

请参阅'URL.php'和'Router.php' - 将网址分解为段后使用。 – 2010-11-08 08:33:10

+0

这可能是显而易见的,但@过滤器并不能阻止这种类型的网址显而易见,因为正如您所说,它会转到hacker.com并由hacker.com来解析它。其次,你真的希望普通用户知道URL中几个字符序列的区别吗? – 2012-01-18 02:02:48

1

你不应该,除非你编码它。未编码的@为特殊含义保留,如FTP用户([email protected])或电子邮件地址(monty[email protected])。

所以,不管诱惑,不要这样做。无论如何,你为什么要?

+0

uuencoded?你是认真的吗? – 2010-11-08 08:06:40

1

RFC 1738只允许以URI的路径段以下字符:A-Za-z0-9_\-\.!~*\'"(),(未查询部分)

3

@用于预先准备的用户名和密码可能为URL-S需要HTTP认证。这是如何不安全的,我无法从这个评论中看出来。理论上,根据上下文你可能不希望用户输入这样的url -s。

除此之外,这种安全检查有点...愚蠢的是,有越来越多的顶级域使用字符而不是ASCII,俄罗斯被分配.рф,中国大陆。还有更多的例子。

http://en.wikipedia.org/wiki/Internationalized_domain_name