我一直在寻找为什么这是真的(来自codeigniter的默认配置文件)。
我想知道为什么 codeigniter 的行为像这种 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!!
|
*/
到目前为止,我看到的唯一原因是:
- 黑客很有创造力,所以不要关掉它
- 防止用户sql注入
- 防止欺骗到不同的网站,例如http://yoursite.com@hacker.com
- 用于 URL 编码
- 白名单比黑名单好
第一个和第五个原因基本上是非sequers。为什么是 URL?如果时髦的 URL 没有安全问题,则它们不需要黑名单,因此不需要此白名单。如果奇怪的 URL 无法入侵您的网站,那么让他们进行创造性的无害实验而不是强迫他们转向实际上能够揭示安全漏洞的东西将是浪费他们的时间。
第二个原因有缺陷,有两个原因;首先,这种清理不会用于查询字符串或 POST 数据,这是您希望找到大多数注入尝试的地方。其次,这不会逃避这些字符,它会拒绝包括它们在内的任何请求。如果 Stack Overflow 被页面加载杀死,我会作为用户感到不安,因为我的帖子包含一个撇号。
理由三和四根本不适用。原因三是用户会认为他们会访问 yoursite.com,但实际上最终会访问hacker.com。您无法采取任何措施来防止这种情况发生,您永远不会收到请求。同样,数字 4 似乎是由误解导致的,即这是生成 URL 而不是解析它们。这段代码正在解析你可以确定的是一个有效的 URL。Codeigniter 在运行此正则表达式之前解码 URI 字符。
所以这些是我听到的答案,我要么不理解,要么我还没有找到真正的原因,或者代码几乎没用。有没有安全专家可以启发我?