从安全的角度来看,PHP代码是可接受的


php code acceptable from security point of view?

考虑下面的代码片段。从安全的角度来看,这段代码是否可以接受?假设$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.”;
  }
?>

显然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;

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

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

如果你最终做到了这一点(还有更多的主题),你甚至可以实际张贴代码的例子,做显示你的一些数据处理,而不是隐藏在后面没有说函数名。验证什么?回到哪里?

实际上,这里没有太多的代码可说,因为这里没有太多的代码。

希望对大家有帮助。