url 调用 php 函数没有安全风险
calling php function by url with no securtiy risk
你好,我还在学习 php 并尝试通过 url link 调用 php 函数,我确实找到了这段代码
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 并尝试通过 url link 调用 php 函数,我确实找到了这段代码
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;
}