ACP*_*ACP 59 c# asp.net passwords asp.net-mvc remember-me
我的Web应用程序的主页上有一个RememberMe复选框.如果用户检查它,我将在cookie中存储电子邮件ID和密码.这是我的代码:
if (this.ChkRememberme != null && this.ChkRememberme.Checked == true)
{
HttpCookie cookie = new HttpCookie(TxtUserName.Text, TxtPassword.Text);
cookie.Expires.AddYears(1);
Response.Cookies.Add(cookie);
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是:
Bra*_*nov 59
将密码存储在cookie中是不安全的,因为它们以纯文本形式提供.
找到关于cookie的答案的好地方是Cookie Central.对于成员资格,通常使用带有长字符串的cookie,该字符串称为"令牌",当您提供用户名和密码时,该字符串是从网站发出的.有关您可以在本文中找到的过程的更多信息.在ASP.NET中使用表单身份验证时,您可以像这样设置身份验证cookie:
FormsAuthentication.SetAuthCookie(userName, isPersistanceCookie);
Run Code Online (Sandbox Code Playgroud)
第二个参数用于"记住我"功能 - 如果为true,它将创建持久性cookie,这些cookie将在您离开站点后持续存在.您还可以以编程方式操作cookie,如下所示:
HttpCookie authCookie =
HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
Run Code Online (Sandbox Code Playgroud)
ste*_*ian 25
没有!不要将密码存储在cookie中!
在ASP.NET中,使用
FormsAuthentication.SetAuthCookie(username, true);
Run Code Online (Sandbox Code Playgroud)
第二个参数的值确定cookie是否持久(记住我复选框的值).
T.J*_*der 16
不,不是远程安全的.您不能保证cookie不以纯文本形式存储(事实上,大多数实现都将它们存储为纯文本).
请注意,"记住我"本质上是不安全的,因为任何拦截cookie的人都可以访问该应用程序.但是暴露用户密码会使其在不安全阶梯中更进一步.:-)如果他们发现,可能会让用户真的很生气.
我使用加密的cookie字符串,该字符串包含用户的帐户名称以及与用户帐户无关(除)在我服务器上的表格之外的令牌.当用户返回站点时,我们解密cookie并查找该令牌是否实际上与该帐户相关联.令牌(以及cookie)会更改每次自动登录,并使用于该自动登录的令牌无效.(令牌和帐户之间存在多对一关系,允许从多个位置自动登录.如果您愿意,可以限制.)如果在X天内未使用,则令牌超时.(这不仅仅是通过限制cookie的持续时间来完成的;它也是在服务器端完成的.)还有一些其他的东西我扔在那里让生活有点 有人试图解码cookie(已成功解密)或使用被盗的cookie(不需要解密)很难,但是过度杀戮是没有意义的(再次,"记住我"本身就是不安全的).
我在一个没有必要(显然)并且拥有大量动态IP客户端的强大安全性的站点上使用它,因此我不会尝试将其锁定到IP.但即使将其锁定到IP也不会使其安全,它只会稍微减少攻击面.
你可能想知道为什么我在cookie中有用户名.对于直接"记住我"的目的,我不建议在那里使用它,即使它是加密的(毕竟,它是用户名+密码系统中的一半认证对).当我在提醒自己如何为这个问题做到这一点时,我查看格式时,我有点惊讶地发现它在我们的cookie中; 但后来我看到这些评论解释了为什么它存在,并且有与"记住我"无关的理由(事后不一定有说服力的理由,但原因).
最后一点,"记住我"本身就是不安全的事实是网站日志非常重要的众多原因之一,以及为什么在允许更改重要帐户信息的过程中需要密码重新验证(为了使其变得更难)有人偷了cookie以取得帐户的所有权).
nai*_*sts 10
这是你永远不应该做的,因为很容易改变cookie的值并发送回服务器.甚至将"用户作为'naivists'"存放在cookie中也是错误的,因为我可以将其更改为"用户以'Pandiya Chendur'登录".
您可以在cookie中执行的操作是向客户端提供信息,即使更改了这些信息,对服务器也没有意义.例如 - 最喜欢的颜色,首页布局等等.
您可以向他们提供存储在cookie中的会话ID,因为如果他们将值更改为其他内容,他们就无法为自己做出更好的事情(除非他们知道来自另一个会话的有效会话ID).
Microsoft的MSDN 对使用cookie的说法如下:
Cookie的安全问题类似于从客户端获取数据的问题.在您的应用程序中,cookie是另一种形式的用户输入,因此需要进行检查和欺骗.用户至少可以看到存储在cookie中的数据,因为cookie在用户自己的计算机上可用.用户还可以在浏览器将cookie发送给您之前更改cookie.
您永远不应将敏感数据存储在cookie中,例如用户名,密码,信用卡号等.不要将任何东西放在不应该由用户或可能以某种方式窃取cookie的人手中.
同样,要怀疑你从cookie中获取的信息.不要假设数据与写出时的数据相同; 使用相同的安全措施来处理用户在数据页中输入的数据所使用的cookie值.本主题前面的示例显示了在显示页面中的值之前对cookie的内容进行HTML编码,就像显示从用户获取的任何信息之前一样.
Cookie在浏览器和服务器之间以纯文本形式发送,任何可以拦截您的Web流量的人都可以读取cookie.您可以设置cookie属性,只有在连接使用安全套接字层(SSL)时才会传输cookie.SSL不保护cookie在用户计算机上不被读取或操纵,但它确实阻止cookie在传输过程中被读取,因为cookie是加密的.有关更多信息,请参阅Web应用程序的基本安全实践.
| 归档时间: |
|
| 查看次数: |
34825 次 |
| 最近记录: |