您好我想问一下这个例子中“脚本动作”的安全性
<form method="post" action="chek_user.php" enctype="multipart/form-data"/>
行动是
$username= htmlentities($_POST['username']);
$mdp=htmlentities(md5($_POST['pass']));
if($user->check_login($username,$mdp)==0)
{
$_SESSION["IP"]=$_SERVER["REMOTE_ADDR"];
$_SESSION["USER_AGENT"]=$_SERVER['HTTP_USER_AGENT'];
$_SESSION["timestamp"] = time();
if (isset($_POST['remembre']))
{
$expire = time() + 24*3600;
setcookie('user', $_SESSION['user'], $expire);
}
header('location:indes.php');
}
else if ($user->check_login($username,$mdp)==-2)
{
echo 'no';
}
答案 0 :(得分:4)
从不使用setcookie()
来设置会话状态。您的头文件中应该有session_start()
。
从不使用md5()
其extremely broken,sha1()
位于已批准的邮件摘要功能的NIST列表中(但kind of broken),但是sha2系列更好,sha256()
是一个很好的选择,但你需要在线找到它的源代码,因为PHP没有安全的哈希函数。您还需要一个盐,尝试搜索与密码存储相关的10,000多个帖子中的一个。
die()
后, ALWYAS header("location: ...");
。此函数仅修改HTTP响应标头,脚本仍然执行。
整个会话必须通过HTTPS。目前您可能违反了OWASP A9。是的,StackOverflow声称OWASP和they don't care。