从安全角度看php代码是否可以接受?
考虑以下代码片段。从安全角度来看,这段代码可以接受吗? 假设$action和$data变量设计为接受用户和 已启用寄存器\全局从安全角度看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
<?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,您也可以编写安全代码。。。但禁用它…谢谢大家。所以,我想全球注册是这里唯一的问题。达伦,很好的观点…非常感谢!!这太棒了!