-3

我有一个文件 index.php(如下所示)。文件夹“myfolder”内还有另一个文件“other.php”

$a = $_GET['page'];

include('myfolder/' .  $a  .  '.php');

网址是:localhost/index.php?page=other

我想做一个像这样的黑客:

localhost/index.php?page=other.php);<MALICIOUS CODE;//

//是评论该行的其余部分)

这可能吗 ?

4

4 回答 4

2

不,您不能注入任意 PHP 代码,除非该代码被传递到将被评估的某个地方。一般而言,PHP 字符串不会被评估为 PHP。

但是仍然存在潜在的安全漏洞。myfolder用户可以通过包含../在 url 中来加载上面的任意页面。如果您在某处有允许他们上传 PHP 文件的上传表单,他们也可以运行任意代码。因为他们可以上传他们想要运行的代码,然后从您的index.php.

于 2013-07-22T20:08:43.907 回答
2

您将无法从 URL 执行任意代码。相反,请尝试使用目录遍历,看看您可以调用哪些有趣的代码。

此外,);and//不会被执行。这与 SQLi 不同。

SQLi 以您尝试的方式工作的唯一原因是 PHP 创建语句,而 SQL(MySQL 等)解析语句。如果你创建了一个类似的语句eval(),它本质上与 SQL 读取 PHP 给出的语句相同。

于 2013-07-22T20:08:46.393 回答
0

这不会执行您提供的代码。它只是作为include函数查找的文件名的一部分插入。变量连接不会导致整个 PHP 行被重新解释。

PHP 执行用户提供的参数的唯一方法是脚本调用eval(), 参数包含在参数中。

于 2013-07-22T20:08:16.027 回答
0

虽然这不会导致任意代码执行,因为您担心这仍然不是一个好主意。

想象一下,如果用户做了类似的事情

 localhost/index.php?page=../../dbconfig.ini

更好的方法是使用将主题名称映射到文件的映射。

$pageMap = array("other"=>"other.php", "home"=>"home.php", "about-us"=>"about-us.php");

if (isset($pageMap[$_GET["page"])){
     include $pageMap["page"];
} else {
     // do your 404 code.
}
于 2013-07-22T20:13:56.420 回答