0

我正在为登录表单的“记住我”部分使用基本的 cookie 系统。这是代码:

    if(isset($_POST['submit']))
{
$username = $_POST['username'];
$password = $_POST['password'];

    if($username&&$password)
    {
        $connect = mysql_connect('localhost','root','');
        mysql_select_db('phplogin');
        $query = mysql_query("SELECT * FROM utilisateurs WHERE NomUtilisateur='$username' AND MotDePasse='$password'");

        $rows = mysql_num_rows($query);
        if($rows==1)
        {
            if($_POST['checkbox'])
            {
                setcookie('username',$username,time()+3600);
                header('Location: membre.php');     

            }else{$_SESSION['username']=$username;header('Location:membre.php');}
        }else echo "Something something error";
    }else echo "Something something darkside";
}

我不确定是否需要保护 cookie,如果需要,该怎么做?我真正想做的就是不允许人们使用伪造的 cookie 登录另一个用户帐户,或者在 cookie 中明文放置敏感信息。

4

1 回答 1

1

目前,如果他知道用户的用户名,任何人都可以登录自己。即使设置了 cookie,您也需要有一个流程来识别用户,他们是真正的客户..例如,当用户登录时,您可以针对该用户保存保存在 cookie 和您的数据库中的随机字母数字字符串,并且下次您将字符串与数据库中的值进行交叉检查并记住每 X 天更改一次字母数字字符串时,这可以防止攻击者复制某人的 cookie 并使用它们登录。像这样的事情

$uniquekey     = 'A234W';
$randomstring  = sha1(strval(rand(0,microtime(true))+ $uniquekey + strval(microtime(true))));
setcookie( 'loginID', $randomstring, time()+60*60*24*7,'/', 'www.yoursite.com', false, true);  

并且在从 cookie 中读取时mysql_real_escape_string用于过滤任何恶意代码

于 2012-07-30T08:46:35.027 回答