【发布时间】:2013-06-17 19:09:37
【问题描述】:
我一直在寻找为什么这是真的(来自 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 字符。
所以这些是我听到的答案,我要么不明白,要么我还没有找到真正的原因,或者代码几乎没用。有没有安全专家可以启发我?
【问题讨论】:
-
您还希望 URL 中包含哪些其他字符?我会说出于 SEO 目的,便于搜索引擎抓取和索引、可读性等等。我在我的框架中做同样的事情。
-
也许是另一种语言的特殊字符? worldjournal.com/view/full_Anews/22914692/…
-
@CodeAngry 我同意你的看法。然而,这种推理并没有要求框架故意杀死所有带有丑陋 URL 的请求。
-
@MikeFairhurst 安全总比后悔好。我喜欢强迫用户做出正确的行为。 永远不要相信用户。对于像我这样的可重用代码编写者/后端开发者来说,这是一个口头禅。相信我,他们在帮你。除了上述好处外,您还可以获得安全奖金。查看您的服务器访问日志,您会看到每天发生的黑客攻击尝试的数量。他们会让你担心。
-
@CodeAngry 这实际上是我帖子的第一个论点。
标签: php security codeigniter web sanitization