background image

{
$clean['email'] = $_POST['email'];
$user = $_SESSION['user'];
$new_password = md5(uniqid(rand(), TRUE));
if ($_SESSION['verified'])
{
/* Update Password */
mail($clean['email'], 'Your New Password', $new_password);
}
}
?>
尽管上例省略了一些细节(如更详细的 email 信息或一个合理的密码),但它示范了对用
户提供的帐户不加以信任,同时更重要的是使用 session 变量为保存用户是否正确回答了
问题($_SESSION['verified']),以及正确回答问题的用户($_SESSION['user'])。正是这种不信
任的做法是防止你的应用产生漏洞的关键。
这个实例并不是完全虚构的。它是从 2003 年 5 月发现的 Microsoft Passport 的漏洞中得到
的灵感。请访问 http://slashdot.org/article.pl?sid=03/05/08/122208 看具体实例、讨论及其它信
息。