繁体   English   中英

我如何获得Cookie?

[英]How Can I Secure the Cookie?

我使用cookie来记住我的功能。

这是我设置Cookie的方式:

$value = $dbusername.'|'.$dbpassword;
setcookie('abc', $value,time()+60*60*24*180, '/');

检索Cookie:

$cookie = $_COOKIE['abc'];
$values = explode("|", $cookie);
$username_ck = $values[0]; //ck stands for cookie
$password_ck = $values[1];

保护我的Cookie(用户名/密码)的一种好方法是什么? 我数据库中的密码以纯文本格式存储。 我不想加密db中的密码。

您永远,永远,永远,永远都不应在数据库中存储纯文本密码。 只需在Google“数据库中的纯文本密码”中查找原因即可。 您的密码应(至少)作为SHA1散列以及随机盐存储在数据库中。

您无法按照自己的方式保护Cookie。 您甚至可以跨站点请求伪造,甚至更糟。 您还应该生成一个安全的随机散列来对cookie进行签名(如果不对其进行加密),以便可以确保其有效性。 但是,与Cookie相关的任何密码都不应最终出现在Cookie中; 如果需要在会话中存储私有数据(无论如何应避免),则应将会话存储在数据库或内存缓存中。

我只是想提供帮助,但是这种会话维护方法非常疯狂。 请,请,请重新考虑。

首先,永远不要将密码存储在纯文本数据库中!

第二:永远不要将纯文本密码存储在Cookie中!

第三:如果您使用Cookie来实现类似“记住我”的选项,则无需将密码存储在Cookie中,而是将随机令牌存储在db和Cookie中,每次用户登录时该令牌都会自动失效并在用户每次登录时创建一个新的。

我也已经提到过“ 从不在纯文本中存储密码”吗?

编辑

请同时结帐: http : //jaspan.com/improved_persistent_login_cookie_best_practice

其中介绍了使用Cookie的最佳方法(基本上是我已经尝试告诉您的逐步说明)。 我说最好的方法,因为我还没有找到更好的方法:)

您永远不要将密码存储在cookie中,因为它会将密码显示为纯文本。 如果黑客捕获了该cookie并打开它并找到密码,那么他们找到用户名只是时间问题。

不良做法将您需要的一切存储在数据库中,并开始使用$ _SESSION []

您应该真正加密密码。 至少要使用md5,如果您想将用户的输入与数据库中的值进行比较,只需对该输入进行加密并进行比较...

还有一件事,您不应该在Cookie中存储密码。

添加在user表名为场remember_key VARCHAR 32

用户登录时,请在用户表中进行以下设置:

$remember = md5(uniqid(mt_rand(), true));

更新查询:

"UPDATE user SET remember_key = $remember WHERE id = $id"

当用户重新进入页面时,查询用户表中的cookie:

"SELECT * from user WHERE remember_key = " . esc($_COOKIE['remember'])

if ($num_rows == 1) $login = true;

对不起,伪代码,也不要忘记对字符串进行转义

我将更新答案

我相信您应该诚实地替换整个代码,并对会话进行一些研究。 我之所以这样说是因为;

首先,您的会话已经安全。 会话执行的操作是将1个带有令牌的cookie放在用户计算机上,并将其余数据存储在服务器上。 因此,您不一定需要加密密码和用户名,但是您仍然可以保持一定的实力。

其次,跨多个IP的人员无法复制会话,因为他们会根据计算机名称和其他简单内容进行检查以确保真实性。

第三,会话比cookie快得多。 每次加载页面时,浏览器都必须将所有cookie发送到服务器。 这样可以安静很多内存。 会话中只有一个cookie。

要存储会话数据,您可以执行以下操作:

session_start(); //Has to go at the top of your page! On each page that uses a session.
$_SESSION['USERNAME'] = $dbusername;
$_SESSION['PASSWORD'] = $dbpassword;

//And to retrieve you just call back the parameter.
$username = $_SESSION['USERNAME'];

查看PHP手册以获取更多信息。 http://www.php.net/manual/zh/session.examples.basic.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM