0

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

2 回答 2

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;
于 2011-10-11T06:29:16.900 回答
0

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

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

如果您最终做到了这一点(还有更多主题),您甚至可以实际发布代码示例来展示您的一些数据处理,而不是将其隐藏在不言而喻的函数名称后面。验证什么?回到哪里?

所以实际上,这里没有太多关于您的代码的内容,因为没有太多代码。

希望这会有所帮助。

于 2011-10-11T02:35:44.457 回答