通过url调用php函数,没有任何安全风险

时间:2016-05-25 23:47:47

标签: php function security call

你好我还在学习php并尝试通过url链接调用php函数,我确实找到了这段代码

if(function_exists($_GET['f'])) {
$_GET['f']();
}

但它对我的功能不安全所以我做了类似的事情

if($_GET['f']=='mouner'){
function mouner(){
    $s = 'my name is mouner';
    return($s);
}
echo mouner();
}

是安全代码吗?如果没有安全风险的url调用函数的最佳方法是什么

3 个答案:

答案 0 :(得分:5)

正如@JuliePelletier建议的那样,您需要在执行与之关联的任何功能之前检查您的用户输入。另一种方便的方式可能是这样的:

$funcs["foo"] = function()
{
    echo "In foo function";
};

$funcs["bar"] = function()
{
    echo "In bar function";
};

if (isset($funcs[$_GET["f"]]))
    $funcs[$_GET["f"]]();

将函数(匿名或仅由其名称)存储在允许函数的关联数组中,然后执行这些函数。

答案 1 :(得分:3)

你是对的,第一个选项风险极大,这就是你需要验证用户输入(包括GET参数)的原因。

你的第二个选择正是如此。代码并不完美,但确实解决了这个严重的漏洞。

答案 2 :(得分:1)

朱莉有正确的答案,只是提供一些代码清理:

if($_GET['f'] == 'mouner'){
    $s = 'my name is mouner';
    echo $s;
}

如果您希望结果有很多变化,可以像switch()这样使用:

if(isset($_GET['f'])){
  $s = "My name is ";
  switch($_GET['f']){
    case 'mouner':
      $s .= "Mouner";
      break;
  }
  echo $s;
}