Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从安全角度看php代码是否可以接受?_Php_Security_Register Globals - Fatal编程技术网

从安全角度看php代码是否可以接受?

从安全角度看php代码是否可以接受?,php,security,register-globals,Php,Security,Register Globals,考虑以下代码片段。从安全角度来看,这段代码可以接受吗? 假设$action和$data变量设计为接受用户和 已启用寄存器\全局 <?php if(common::IsUserAdmin($userID)) { $isAdmin = true; } $data = common::Validate_And_Return_Input($data) Switch($action) { case “add”: common::addSomething

考虑以下代码片段。从安全角度来看,这段代码可以接受吗? 假设$action和$data变量设计为接受用户和 已启用寄存器\全局

<?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.”;
  }
?>

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

如果您实际上打算在连接到internet的服务器上运行它,那么您应该遵循PHP手册中建议的安全主题中的最低要求,包括禁用register globals

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

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


希望这会有帮助。

显然register\u 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;

如果启用了register_globals,那么在安全性方面,任何东西都是不可接受的。
common
在做什么?那么,
$action
是从哪里来的呢?您的格式设置在哪里(干净易读的代码是安全性的第一步,因为它更容易检查)…???如果启用了register_globals,我可以在查询字符串上传递
?isAdmin=1
,并绕过一些授权检查…?@BoltClock:在启用register_globals的情况下,100%可以编写安全代码。这不容易,但有可能。也就是说,如果您的代码使用register_globals,或者您不遵循标准的最佳实践(预先删除变量等),那么您将很容易受到攻击。但学究般地说,即使启用了RG,您也可以编写安全代码。。。但禁用它…谢谢大家。所以,我想全球注册是这里唯一的问题。达伦,很好的观点…非常感谢!!这太棒了!