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