Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我怎样才能保证饼干的安全?_Php - Fatal编程技术网

Php 我怎样才能保证饼干的安全?

Php 我怎样才能保证饼干的安全?,php,Php,我使用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 $pas

我使用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];
保护我的cookies(用户名/密码)的好方法是什么?
数据库中的密码以纯文本形式存储。我不想在数据库中加密密码。

您不应该将密码存储在cookie中,因为cookie将密码显示为纯文本。如果黑客抓到了这个cookie并打开它找到了密码,那么找到用户名只是时间问题


糟糕的做法是将所需的一切存储在数据库中,然后开始使用$\u SESSION[]

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


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

你永远不应该在数据库中存储明文密码。只需谷歌“数据库中的明文密码”就能找到原因。您的密码应该(至少)与随机salt一起存储在数据库中

你不能用这种方式保护你的饼干。如果不是更糟的话,你会让自己面临跨站点请求伪造的风险。您还应该生成一个安全的随机哈希来对cookie进行签名(如果不加密cookie的话),以确保cookie的有效性。但是任何与密码相关的东西都不应该出现在cookie中;如果需要在会话中存储私有数据(无论如何都应该避免),则应将会话存储在DB或memcache中


我只是想帮上忙,但这种会话维护方法简直是疯了。请,请,请重新考虑。

首先,您永远不应该在纯文本数据库中存储密码

第二:永远不要在cookies中以明文形式存储密码

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

我还提到过“永远不要以纯文本形式存储密码”

编辑

请同时结帐:


它描述了使用cookies的最佳方式(基本上是对我已经尝试告诉你的内容的逐步解释)。我说的是最好的方法,因为我还没有找到更好的方法:)

user
表中添加一个名为
memory\u key
VARCHAR 32的字段

用户登录时,请在用户表中设置:

$remember = md5(uniqid(mt_rand(), true));
更新查询:

“更新用户集memory\u key=$memory WHERE id=$id”

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

$remember = md5(uniqid(mt_rand(), true));
“从用户中选择*,其中memory_key=“。esc($\u COOKIE[‘记住’])

if($num\u rows==1)
$login=true

对不起,伪代码,也别忘了转义字符串


我将更新答案

老实说,我认为您应该替换整个代码,并对会话进行一些研究。 我之所以这么说是因为

首先,您的会话已经安全。会话所做的是在用户计算机上放置一个带有令牌的cookie,并将其余数据存储在服务器上。因此,您不一定需要加密密码和用户名,但您仍然有一些优势

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

第三,会话比cookies快得多。每次加载页面时,浏览器都必须将所有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手册了解更多信息。

你用这个干什么?为什么不呢?存储明文密码总是一个坏主意,在cookie中更是如此!我只收到一条评论,从来没有做过以上所有的事情!我已经有课了。。。上面的内容是为了纪念我。如果一个黑客窃取了cookie并将其放入浏览器的临时文件夹,该怎么办!黑客只需进入该网站即可轻松访问。@user311509:如果黑客可以窃取cookie,那么你就有更大的问题了。因为黑客必须访问你的计算机。@user311509如果你使用这个脚本,我很肯定你会被黑客攻击