包含文件漏洞

时间:2011-03-23 20:01:23

标签: php

我尝试阅读Claroline源代码,以便从编码中学习 在index.php文件中,在第一行代码中,他们写了

unset($includePath); // prevent hacking

您可以从here看到完整的claroline源代码。

他们评论说这条线用于防止黑客入侵。
我不知道他们为什么要在变量从未在该行之前定义时取消设置$includePath

这行代码实际上的目的是什么,以及它们意味着什么样的黑客攻击类型?

4 个答案:

答案 0 :(得分:1)

在该点之前可能未在代码中设置变量,但如果启用了register_globals,则可以由恶意用户在URL中设置该变量。

答案 1 :(得分:1)

我自己没有看过这个来源,但是一些搜索提供了以下类型的安全建议:

Claroline mambo.inc.php and postnuke.inc.php "includePath" file include


请注意,这取决于register_globals是否已启用,其中:

  • 不是默认值:默认情况下,它已被禁用了很长时间(自PHP 4.2.0开始)
  • 是不好的做法(不安全^^,因为它允许任何人将变量注入PHP脚本;这就是为什么这个,在这种情况下,未设置“以防止黑客入侵”)

答案 2 :(得分:1)

听起来你大部分时间都在寻找教育信息,所以这里有一个register_globals曾经做过什么的解释......为什么它在那里......为什么它不再存在(你应该永远不要打开它。

变量通过$_GET$_POST(或$_REQUEST)数组进入... register_globals做了什么,通过获取这些数组的所有元素,使编程变得更容易,以及将它们放在全局命名空间中 - 即,将“常规”全局变量放在它们之外 - 因此$_GET['includes']很容易被简单地引用为$includes

这是在intarweb的快乐时期,当时互联网没有像现在这样频繁增长,技术不是很清楚,知道如何破解网站的人数较少,没有人正在编写会自动破解网站的蠕虫。

非常不安全 - 因为如果一个懒惰的程序员没有打扰正确初始化所有变量(例如,检查$ includes是否已设置,然后在正确初始化之前使用它),那么这些不正确初始化的变量中的任何一个都可以适应黑客想要的任何东西。 PHP是相当新的,许多业余爱好者都在编写代码 - 经常做的事情就是忘记在SQL查询中正确地转义变量。因此,一个安全漏洞通常很容易跟进另一个漏洞,允许黑客(或自动脚本)获得更深层次的访问权限。

大约在2001年左右,人们开始非常严肃地警告register_globals的后果 - 所以这是一个相当古老的问题,但是要留意这一点仍然很好,尤其是那些没有安全声誉的应用程序

答案 3 :(得分:0)

héhé这是一个很长的故事。

事实上,在早期的“天真”版本的claroline中,安全性并不是真正的目标; - )

$ includePath在init中计算以构建所有其他claroline路径。

对于配置了register global = on的服务器,这是一种非常简单的破解方式。

ie:include($ includePath。“/ lib / pager.lib.php”);

这条简单的线条是一个“补丁”。

as require'../../../../inc/claro_init_global.inc.php';包含在所有内容中。

结论:Claroline是一个在php4中启动的旧代码,脚本为php3编写,安全(现在)但旧的。风格不是“现代”代码的好灵感: - )

安全的claroline是一次伟大的冒险 - )Mathieu做了大部分修正。

我记得他们的工作时间超过一个月,因为注册全球关闭(我的意思是7年前)