通过url调用php函数没有安全风险
您好,我还在学习php,并试图通过url链接调用php函数,我确实找到了这段代码通过url调用php函数没有安全风险,php,function,security,call,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调用函数而没有安
if(function_exists($_GET['f'])) {
$_GET['f']();
}
但这对我的功能不安全,所以我做了类似的事情
if($_GET['f']=='mouner'){
function mouner(){
$s = 'my name is mouner';
return($s);
}
echo mouner();
}
那是安全代码吗?如果不是通过url调用函数而没有安全风险的最佳方法,那么第一个选项的风险非常大,这就是为什么需要验证用户输入(包括GET参数)
你的第二个选择就是这样。该代码并不完美,但确实解决了这一严重漏洞。正如@JuliePelletier所建议的,在执行任何相关功能之前,您需要检查用户输入。另一个简便的方法可能是这样的:
$funcs["foo"] = function()
{
echo "In foo function";
};
$funcs["bar"] = function()
{
echo "In bar function";
};
if (isset($funcs[$_GET["f"]]))
$funcs[$_GET["f"]]();
将函数(匿名或仅按其名称)存储在允许函数的关联数组中,然后执行这些函数。Julie给出了正确答案,只是提供了一些代码清理:
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;
}
在php中调用
函数
时,不需要将echo
添加到语句中。。!另外,您不需要将函数mouner(){}
放在if
函数中,因为您可能知道,您将函数声明为本地函数,您可能无法在this if函数之外的其他地方调用该函数。。!你说的安全风险是什么意思?同样,当你在你的第一个代码中写到:if(函数存在($\u GET['f']))
asif(isset($\u GET['f']))
我知道但你不知道。。!一个更具体的例子可能会有帮助。。。现在,您可以执行echo“我的名字是穆纳”代码>在你的if中,它将是完全等效的。谢谢这帮了我很多忙。很久没有看到这样做了哈哈!我投了另一个建议的票;-)