请考虑以下代码段。从安全角度来看,此代码是否可以接受? 假设$ 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.”;
}
?>
答案 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 您的一些数据处理的代码示例,而不是将其隐藏在无言功能之后名。验证什么?回到哪里?
实际上,这里的代码没什么好说的,因为代码不多。
希望这有用。