我有一个文件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;//
(//
将评论该行的其余部分)
这可能吗?
答案 0 :(得分:2)
不,你不能注入任意PHP代码,除非该代码被传递到将被评估的地方。通常,PHP字符串不会被评估为PHP。
但仍存在潜在的安全漏洞。用户可以通过在网址中加入myfolder
来加载../
上方的任意页面。如果你有一个允许他们上传PHP文件的上传表单,他们也可以运行任意代码。由于他们可以上传他们想要运行的代码,然后将其包含在index.php
。
答案 1 :(得分:2)
您将无法从URL执行任意代码。相反,请尝试使用directory traversal并查看可以调用的有趣代码。
此外,);
和//
将不会被执行。这与SQLi不同。
SQLi以您尝试的方式工作的唯一原因是因为PHP创建了语句而SQL(MySQL等)会解析该语句。如果您创建了一个类似的语句并且eval()
它,它将与读取PHP给出的语句的SQL基本相同。
答案 2 :(得分:0)
这不会执行您提供的代码。它只是作为include
函数查找的文件名的一部分插入。变量连接不会导致整个PHP行被重新解释。
PHP执行用户提供的参数的唯一方法是脚本调用eval()
,参数中包含参数。
答案 3 :(得分: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.
}