是否允许此代码? - > $_GET['function_name']
然后()。合并后,它将如下所示:$_GET['function_name']();
这就是我想要做的事情:
我有一个功能:
function a() {
echo "A";
}
当我转到此网址时: www.myurl.com/?id=page1&function_name=a
我想从URL中获取函数名称:
echo ' .'$_GET['function_name']().' B C D E F G';
代码工作正常,但我只是很好奇。 $_GET['function_name']()
好吗?如果这是一个糟糕的代码,还有其他方法吗?我不想要任何安全风险。谢谢你们!
答案 0 :(得分:6)
是的,这是允许的。
一个。使用变量/字符串作为函数名称是半常见的。如果您想测试,请尝试以下方法:
<?php
$function = 'print_r';
$array = array(1, 2, 3, 4, 5);
$function($array);
它的工作原理与您使用$_GET['function']()
时相同;数组的一个例子,为了更加清晰:
<?php
$user_data = array('function' => 'print_r');
$values = array('one', 'two', 'three');
$user_data['function']($values);
是的,这是一个非常糟糕的主意,也是您可能添加到网站的最大安全风险之一。
一个。这样做将允许用户或“攻击者”(如果您想要从安全意义上考虑)在服务器上执行他们喜欢的任何代码。现在,如果你没有将任何用户控制的参数传递给函数,那么它们显然是有限的,但是,它们仍然会造成一些损害。
让我们以更糟糕的情况为例:
<?php
$function = $_GET['function'];
$parameter = $_GET['parameter'];
$function($parameter);
现在,如果我通过以下方式访问此页面该怎么办?
www.example.com/page.php?function=exec¶meter=rm -rf %2f
虽然,你可以做更多的事情(比如上传一个后门),但我认为这得到的重点是=]