美好的一天..我有一个问题,但我认为这不是一个真正的问题。我只是关于php cookie的好奇心。我已经在我的网站上进行了设置。 我用它作为"记住我的基础"复选框,它正常工作,但是,我真的不知道设置cookie的重要性。我是否会使用它来自动登录没有按下注销按钮但可能只是关闭浏览器的用户?或者我可以用它来保存他们的电子邮件地址并让他们填写密码字段?这真让我烦恼。什么是cookie的重要性。我的意思是,如何正确使用cookie?我希望你理解我的问题。请帮我清除这个cookie的事情。真的很感激,如果你回答这个问题。谢谢。对我不要苛刻: - )
答案 0 :(得分:2)
Cookie是一个用户可控的变量。就像$ _GET一样。因此,在使用它之前,例如,作为访问文件的路径参数,请注意它的值应该是它应该是什么。
设置setcookie()可选参数也可以防止很多攻击。 文档在这里: http://php.net/setcookie
当您调用setcookie()时,它会向浏览器发送一个软请求,以便在其他响应中设置cookie,因此浏览器是否支持cookie。仅保存cookie中的公共数据而非重要数据。通过在cookie中保存密码,中间人攻击将显示密码。此外,通过几分钟访问客户端的硬件,孩子们也可以显示密码。所以,你需要的是在数据库中存储一个长的真随机登录密钥+登录表的行ID,其中包含诸如row-id,random-login-key,user-id,signin-time,last-visit等列。时间等。
登录密钥的256位(32字节)或512位(64字节)随机值就足够了。
mt_rand()和rand()不是安全的随机生成器,因此请使用以下函数之一生成安全的随机字节:
http://php.net/openssl_random_pseudo_bytes
http://php.net/mcrypt_create_iv
# License: wtfpl - http://www.wtfpl.net/txt/copying/
function random_bytes($size)
{
if(function_exists('openssl_random_pseudo_bytes'))
{
$bytes = openssl_random_pseudo_bytes($size, $is_strong);
if($is_strong === true)
return $bytes;
}
if(function_exists('mcrypt_create_iv'))
return mcrypt_create_iv($size, MCRYPT_DEV_RANDOM);
else
{
$bytes = '';
for($i=0; $i < $size; $i++)
$bytes .= chr(mt_rand(0, 255));
return $bytes;
}
}
尽管将登录密钥保存到cookie并不完全安全,但这是所有网站执行此操作的唯一方法。要获得完全的安全性,请使用HTTPS协议。
另外,您可以在owasp.org上查看Authentication,Session Management和cookie theft/session hijacking备忘单。