从安全角度来看,php代码可以接受吗?

时间:2011-10-10 20:54:40

标签: php security register-globals

请考虑以下代码段。从安全角度来看,此代码是否可以接受? 假设$ action和$ data变量旨在被用户接受 register_globals已启用。

<?php

if(common::IsUserAdmin($userID))
 {
 $isAdmin = true;
 }
   $data = common::Validate_And_Return_Input($data)
   Switch($action)
    {
     case “add”:
     common::addSomething($data);
     break;

     case “delete”:
     if($isAdmin)
     {
    common::deleteSomething($data);
         }
    break;
   case “edit”:
   if($isAdmin)
   {
    common::editSomething($data);
   }
   break;
  default:
  echo “Bad action.”;
  }
?>

2 个答案:

答案 0 :(得分:1)

显然 register_globals更好(安全明智)。如果可以的话,禁用它。但是,如果这不是一个选项(遗留系统等),这里有一些反馈。

更改为$ isAdmin检查:

// This prevents register_globals from overwriting $isAdmin
$isAdmin = common::IsUserAdmin($userID);
$data = common::Validate_And_Return_Input($data)

// The rest of the code
// ....

此切换是在$action中过滤掉不需要的数据的好方法。没关系。

此外,如果您期望用户提供一定数量的选项,请根据列表进行检查以确保它们是安全的:

$allowed = array('a', 'b', 'c', 'd');
if (in_array($user_input, $allowed))
{
    // Do your stuff. $user_input is safe
}

最后利用你知道(或期望是)整数/浮点数的类型转换变量,以确保你得到你期望的结果:

$sanitized_input_int = (int)$user_input_int;
$sanitized_input_float = (float)$user_input_float;

答案 1 :(得分:0)

由于您没有显示任何代码:从安全角度来看,没有什么可以保护的。所以只需将其压缩成一个文件并将其存放起来让它腐烂10年,直到你删除它为止。

如果你真的打算在连接到互联网的服务器上运行它,你应该遵循PHP手册中建议的安全主题,包括禁用注册全局。

如果您最终管理了(有更多主题),您甚至可以实际发布 show 您的一些数据处理的代码示例,而不是将其隐藏在无言功能之后名。验证什么?回到哪里?

实际上,这里的代码没什么好说的,因为代码不多。

希望这有用。