验证然后只是退出()函数或将整个身份验证结果包装在if语句中是好的还是坏的做法?实施例
function foo($uid)
{
$allowed = $auth->checkIfAllowed($uid);
if ($allowed == false) exit();
//continue with senstive code here
}
}
OR
function foo($uid)
{
$allowed = $auth->checkIfAllowed($uid);
if ($allowed == true)
{
// do sensitive stuff
}
}
答案 0 :(得分:4)
我想借此机会谈谈exit;
(正如其他人所说的那样,第二个比第一个更明确,并且给你机会向用户发送一个很好的错误信息) 。我的主要牛肉(我有几个exit;
)是人们应该停止在库中使用它,即可以/将在其他项目中使用的代码...你知道它有多刺激它是调试那些?抛出异常,触发致命错误,但给我带有描述的某事。
/咆哮
答案 1 :(得分:3)
您的示例是等效的。
但是,最终用户突然退出脚本通常并不常用。相反,请向您的用户发送以HTML格式打印的有用错误消息,而不是例如从die()
调用获得的纯文本。
function foo($uid)
{
$allowed = $auth->checkIfAllowed($uid);
if ($allowed == false)
{
$errormsg = "You are not allowed to view this page";
}
else
{
//continue with senstive code here
}
}
稍后,在HTML中打印错误,而不是仅仅中止脚本:
<div class='error'><?php echo $errormsg; ?></error>
答案 2 :(得分:0)
或者。我不认为这会有所作为。它完全相同。在编程中,有许多方法可以对事物进行编程,在大多数情况下从不以正确的方式进行编程。
答案 3 :(得分:0)
他们完全一样。缩进和编码风格是唯一的区别。在这两种情况下,除非成功完成身份验证,否则敏感代码将不会执行。
通常,在你的代码中表达更好,所以我推荐第二种方法。