我希望我的网站有一个用户可以点击的复选框,这样他们每次访问我的网站时都不必登录.我知道我需要在他们的计算机上存储一个cookie来实现它,但该cookie中应包含哪些内容?
此外,是否存在常见错误,需要注意保持此cookie不会出现安全漏洞,这可以避免,同时仍然提供"记住我"功能?
我的Web应用程序使用会话在用户登录后存储有关用户的信息,并在应用程序中从一个页面移动到另一个页面时维护该信息.在这个特定的应用程序,我存储user_id,first_name和last_name人的.
我想在登录时提供"Keep Me Logged In"选项,这将在用户的计算机上放置一个cookie两周,这将在他们返回应用程序时以相同的细节重新启动他们的会话.
这样做的最佳方法是什么?我不想将它们存储user_id在cookie中,因为看起来这样可以让一个用户轻松尝试伪造另一个用户的身份.
我的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)
我想知道的是:
由于这个问题相当受欢迎,我认为给它更新很有用.
让我强调AviD给出的正确答案:
您不应该在cookie中存储任何需要加密的数据.相反,在cookie中存储一个大小合适的(128位/ 16字节)随机密钥,并将您想要保密的信息存储在服务器上,由cookie的密钥标识.
我正在寻找有关加密cookie的"最佳"加密算法的信息.
我有以下要求:
必须快速
加密和解密数据(几乎)每个请求都要完成
它将在小数据集上运行,通常是大约100个字符或更少的字符串
它必须是安全的,但它不像我们正在保证银行交易
我们需要能够解密信息,以便SHA1等出来.
现在我已经读过Blowfish快速而安全,我读过AES快速而安全.Blowfish的块大小较小.
我认为这两种算法都提供了足够的安全性?所以速度将成为决定性因素.但我真的不知道这些算法是否适合小字符串,以及是否有更适合加密cookie的算法.
所以我的问题是:
什么加密算法最适合加密cookie数据?
更新
更准确地说,我们要加密2个cookie:一个包含会话信息,另一个包含"记住我"信息.
该平台是PHP上作为VPS上的Linux上的apache模块.
更新2
我同意cletus,将任何信息存储在cookie中是不安全的.
但是,我们需要实现"记住我"功能.可接受的方法是设置cookie.如果客户端提供此cookie,则允许他或她以(几乎)相同的权限访问系统,就像他/她提供有效的用户名密码组合一样.
因此,我们至少要加密cookie中的所有数据,以便:
a)恶意用户无法读取其内容;
b)恶意用户无法制作自己的cookie或篡改它.
(在我们对它做任何事情之前,对所有来自cookie的数据进行消毒并检查其有效性,但这是另一个故事)
会话cookie不再包含sessionId/timestamp.它可以在没有加密的情况下使用,但我认为加密它没什么害处?(计算时间除外).
因此,鉴于我们必须在cookie中存储一些数据,加密它的最佳方法是什么?
更新3
对此问题的回答使我重新考虑所选择的方法.我确实可以做同样的事情而不需要加密.我不应该加密数据,而应该只发送没有上下文而无法猜到的数据.
然而,我也不知所措:
我认为加密使我们能够将数据发送到BigBadWorld™,并且仍然(相当)确定没有人可以阅读或篡改它......
不是全部加密点?
但下面的反应推动:不要相信加密来实现安全性.
我错过了什么?
查看Gmail的Cookie,很容易看到存储在"记住我"cookie中的内容.用户名/一次访问令牌.在用户名是秘密的情况下,它可以以不同的方式实现.但无论如何......事情的安全性不是很高:你偷走了饼干而你已经准备好了.
我的问题是在功能方面,但是你什么时候擦拭他们的访问权限?如果用户登录而未在另一台计算机上单击"记住我",是否应该在所有计算机上使其访问权限无效?我问的是传统上如何实现它,以及它应该如何实现.
我想在登录前添加"记住我"复选框选项.
在用户的浏览器中安全存储cookie的最佳方法是什么?
例如,Facebook有"记住我"复选框,这样每次进入facebook.com时您都已登录.
我当前的登录使用简单的会话.
我怎样才能重新使用原来的管理员登录()和AuthenticationForm设置较长的Cookie有效期与"记住我"选项,在登录页面检查用户?我目前正在通过urls.py使用内置登录
url(r'^login/$','django.contrib.auth.views.login', {'template_name': 'authentication/login.html'}, name='login'),
Run Code Online (Sandbox Code Playgroud)
该复选框在我的login.html中实现为:
<label><input name="remember_me" type="checkbox">Keep me logged in</label>
Run Code Online (Sandbox Code Playgroud)
但我不知道如何通过AuthenticationForm传递信息给django.contrib.auth.views.login
目前,如果用户未选中"记住我"框,则会在settings.py中定义cookie年龄
SESSION_COOKIE_AGE = 360
Run Code Online (Sandbox Code Playgroud)
我发现了几个类似的问题,但我认为这不需要安装单独的应用程序.下面的代码片段(http://djangosnippets.org/snippets/1881/)看起来很有希望,但我只编写了几个月的python和Django,但是我无法让它工作:
def login(request, *args, **kwargs):
if request.method == 'POST':
if not request.POST.get('remember_me', None):
request.session.set_expiry(0)
return auth_views.login(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud) 我正在尝试在登录表单中实现"记住我"功能.我使用ASP.NET MVC作为我的Web应用程序.我设法让cookie的东西工作,但我没有自动登录用户,以防他/她之前检查记住我复选框.我知道问题是什么,但我不知道如何解决它.
在我的HomeController中,我有以下内容:
private LoginViewModel CheckLoginCookie()
{
if (!string.IsNullOrEmpty(_appCookies.Email) && !string.IsNullOrEmpty(_appCookies.Password))
{
var login = new LoginViewModel
{
Email = _appCookies.Email,
Password = _appCookies.Password
};
return login;
}
return null;
}
public ActionResult Index()
{
var login = CheckLoginCookie();
if (login != null)
return RedirectToAction("Login", "User", login);
var viewModel = new HomeIndexViewModel
{
IntroText =
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, …Run Code Online (Sandbox Code Playgroud) 我想在登录页面上包含"记住我"功能,但我不知道它的实际含义(它的工作原理).我在许多网站上看到了不同的用途,但我没有得到它的实际意义.
我目前以编程方式(例如,当他们通过Facebook或其他方式登录而不是使用我的登录表单)登录用户时:
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(user, "", authorities)
);
Run Code Online (Sandbox Code Playgroud)
我想要做的是将用户登录,就好像他们在登录表单中设置了remember-me选项一样.所以我猜我需要使用RememberMeAuthenticationToken而不是UsernamePasswordAuthenticationToken?但是,我为key构造函数的参数添加了什么?
RememberMeAuthenticationToken(String key, Object principal, Collection<? extends GrantedAuthority> authorities)
Run Code Online (Sandbox Code Playgroud)
remember-me ×10
security ×6
cookies ×4
php ×3
asp.net-mvc ×2
login ×2
asp.net ×1
c# ×1
checkbox ×1
django ×1
encryption ×1
passwords ×1
session ×1
spring ×1
spring-mvc ×1