如何存储的cookie(安全),并保持用户登录时,他们重新打开浏览器

问题描述:

如何安全地在Cookie中保存用户的密码,同时仍然能够访问密码?我有一个存储密码的用户名和sha1版本的cookie,但当我尝试检索它们时,我得到了(如预期的)用户名和sha1版本的密码,而不是密码本身。谢谢!如何存储的cookie(安全),并保持用户登录时,他们重新打开浏览器

<!DOCTYPE html> 
<html> 
    <head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
<title></title> 
    </head> 
<body> 

<form id='my_login' name='my_login' action='<?php htmlentities($_SERVER['PHP_SELF'])?>' method='post' accept-charset='UTF-8'> 
<input type='hidden' name='submitted' id='submitted' value='1'/> 
<label for='username'>Username: </label> 
<input id='username' type='text' name='username' value='<?php if(isset($_COOKIE['username'])) echo htmlentities($_COOKIE['username']); ?>'/> 
<br/> 
<label for='username'>Password: </label> 
<input id='password' type='password' name='password' value='<?php if(isset($_COOKIE['password'])) echo htmlentities($_COOKIE['password']); ?>'/> 
<br/> 
    <label for "set_cookie">Remember Me</label> 
<input type="checkbox" name="set_cookie" id="set_cookie" value="1"/> 
<button id='submit' type='submit' name='submit'>login</button> 
    </form> 

    </body> 
    <html> 

如何安全地在cookie

存储用户密码,切勿将本地用户的密码。即使使用当前被认为是安全的加密技术,您也正在开放巨大的潜在安全漏洞,因为您正在跨越大量客户端计算机为可能的攻击者传播数据。

给用户提供,而不是一个随机会话ID一个长期的cookie。为将来的会话提供一个到期时间(无限期地存储它不是一个好主意,许多网站将其限制为30天)。让该ID在服务器上自动登录用户。

+1

是不是与密码一样的想法?如果黑客获得了该会话ID的控制权,那么他们可以登录,对吧? – 2011-12-26 16:02:23

+2

@user yes - 这是每个自动登录机制的固有风险。但是,如果黑客窃取会话ID – 2011-12-26 16:02:54

+2

,黑客不会学习用户的*密码。另外 - 正如Pekka所指出的那样,您应该有时间限制会话的有效性,以最大限度地减少受到威胁的会话所处的时间。即使黑客获得会话cookie,他们也只能使用它,直到(a)它到期,或者(b)当用户使用其密码登录时,它会被另一个有效的用户会话替换。如果他们获得密码,只要该密码有效,他们就可以继续登录。 – tvanfosson 2011-12-26 16:05:20

此外,当您使用PHP setcookie确保您的最后一个PARAM httponly添加为true。

çš„HttpOnly

为TRUE时,cookie将仅通过HTTP协议进行访问。这意味着cookie不能被脚本语言(如JavaScript)访问。有人认为,这种设置可以通过XSS攻击有效地帮助减少身份盗用(尽管它不受所有浏览器的支持),但是这种说法往往存在争议。在PHP 5.2.0中添加。 TRUE或FALSE

来源:PHP setcookie

这将能够由JavaScript被劫持减轻饼干。

如果您还可以设置secure标志只能通过HTTPS来发送cookie的能力。