在登录系统上工作并尝试实现记住我的功能.
最近,我做了关于这个主题的研究,阅读了一堆文章,帖子,故事,小说,童话(称之为,因为其中一些甚至不包含1行代码,只是大量的单词),cookie漏洞如固定,劫持......等
并决定实现以下目标
但我真的很困惑我的主要问题:哪种方式是正确的,为了"记住我"的功能?使用cookies/session/database?
请在代码上解释你的想法.(没有代码,我无法理解)
目前,我的代码看起来像那样
在登录期间,我使用以下功能来设置cookie和会话
protected function validateUser($userid, $ckey=0, $rememmber=0) {
session_start();
session_regenerate_id(true); //this is a security measure
$_SESSION['user_id'] = $userid;
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
if (isset($remember) && $rememmber == 'on') {
setcookie("user_id", $_SESSION['user_id'], time() + 60 * 60 * 24 * COOKIE_TIME_OUT, "/");
setcookie("user_key", sha1($ckey), time() + 60 * 60 * 24 * COOKIE_TIME_OUT, "/");
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
然后在安全用户页面上,检查user_id使用user_id从db获取有关用户的所有重要数据
public function protect() {
session_start();
/* Secure against Session Hijacking by …Run Code Online (Sandbox Code Playgroud) 我正在制作Rails应用程序.
我想实现一个"记住我"复选框,以便用户在下次使用Devise:rememberable时跳过输入密码.但我无法弄清楚如何实现.
如果您对此有任何想法,请向我展示一些示例代码.
搜索了很多后我没有得到任何答案,最后我不得不回复你.下面我详细解释我的问题.这太长了,所以请不要放弃阅读.我用简单的语言解释了我的问题.
我一直在开发一个asp.net mvc项目.我正在使用标准的ASP.NET角色和成员资格.一切都很好,但记住我的功能根本不起作用.我列出了所有工作细节.希望你们能帮助我解决这个问题.
我只需要这个:
我需要用户登录Web应用程序.在登录期间,他们可以记住我或没有它登录.如果用户登录时记得我,我希望浏览器长时间记住它们,让我们说至少一年或相当长的时间.他们在www.dotnetspider.com,www.codeproject.com,www.daniweb.com和许多其他网站上的方式.如果用户登录时不记得我,那么浏览器应允许访问网站大约20-30分钟,之后他们的会话将过期.当用户登录并关闭浏览器而不注销时,他们的会话也应该到期.
注意:我已经成功实现了上述功能,而不使用标准的asp.net角色和成员资格,为用户创建自己的talbes并对我的数据库表进行身份验证,在我的其他项目中设置cookie和会话.但对于这个项目,我们从一开始就使用标准的asp.net角色和成员资格.我们认为它会起作用,在测试之后所有内容都构建完毕后它才起作用.现在我们不能用我自己的自定义用户表和所有东西替换标准asp.net角色和成员资格的现有功能,你明白我在说什么.
有标准的asp.net角色和成员资格功能存在某种错误,或者我有标准asp.net角色和成员身份错误的整个概念.我已经说明了我想要的东西.我认为这很简单合理.
我做了什么
在我的控制器动作中,我有这个:
FormsAuth.SignIn(userName,rememberMe);
public void SignIn(string userName,bool createPersistentCookie){FormsAuthentication.SetAuthCookie(userName,createPersistentCookie); }
现在问题如下:
我已经在上面的章节中说过"我只需要这个".用户可以成功登录系统.它们的会话存在的时间与web.config中超时值中指定的分钟数相同.我还给了我的web.config示例.在我的samplem中如果我将超时设置为5分钟,则用户会话在5分钟后到期,这没关系.但是如果用户关闭浏览器并重新打开浏览器,用户仍然可以在没有登录的情况下进入网站,直到"超时"中指定的时间还没有消失.超时值的滑动到期也正常.现在,如果用户在记住我的情况下登录系统,则用户会话在5分钟后仍会过期.这不是好行为,是吗?我的意思是说,如果用户登录系统并记住我检查了他应该记住很长时间,直到他没有退出系统,或者用户不会手动删除浏览器中的所有cookie.如果用户登录系统而不记得我检查过他的会话应该在web.config中指定的超时时间段之后到期,以及用户是否关闭浏览器.问题是如果用户关闭浏览器并重新打开它,他仍然可以在不登录的情况下进入网站.
我在这个主题上搜索了很多网,但我无法得到解决方案.在Scott Gu撰写的关于完全相同主题的博客文章(http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx)中.用户在评论中抱怨同样的事情,斯科特先生没有给出简单的解决方案.
我在以下地方阅读:http : //weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14/91191. ASPX
我想这是很多用户的问题.正如Scott Gu先生所做的博客文章所示.
非常感谢您的帮助.提前致谢.
我已经实现了在Symfony2中记住我的功能.当我使用"记住我"框登录时,会创建名为"REMEMBERME"的cookie.如果我关闭浏览器并在数小时后打开它,那么该cookie也可用.但是当我加载我的应用程序的主页时,cookie会自动删除,我看不到用户登录.有人能解释我删除cookie的原因吗?
remember_me:
key: qwerty
lifetime: 604800
path: /
domain: ~
Run Code Online (Sandbox Code Playgroud)
这是我的security.yml文件部分
编辑:我还没有找到这个问题的解决方案......
EDIT2:现在遇到了新问题.REMEMBERME cookie根本没有设置.怎么解决这个?
已解决:见下面的答案
我正在创建一些"记住我"功能,作为登录的一部分.
当我在登录过程中使用以下内容创建持久性cookie时:
FormsAuthentication.SetAuthCookie("someusername", true);
Run Code Online (Sandbox Code Playgroud)
我的Web.Config看起来如下:
<authentication mode="Forms">
<forms loginUrl="~/sign-in" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
在要求用户再次提供其登录详细信息之前,cookie有效期为多久?此外,是否/设置持久性cookie时使用的默认时间长度是多少?
我很好奇Remember Me如何工作以及它如何在Spring Security中运行?
我知道服务器会向客户端发送长期存在的cookie.然后客户端发回cookie,服务器可以识别客户端,因为服务器上有关系的哈希映射cookie --> session.
我不明白服务器[服务器端应用程序]在服务器[Tomcat]重新启动后如何通过cookie识别客户端.
Spring Security cookie-session在服务器关闭之前如何以及在何处保存地图?它是特定于服务器的(即Tomcat,Jetty等发生了不同的事情)吗?
PS弹簧安全和重新部署的另一个相关问题:即使我没有打勾RememberMe并登录,我仍然可以在重新部署约3分钟后得到认可.它可以修复吗?
我正在编写一个"记住我"的登录表单,到目前为止我读过的教程(部分是为了确保我做得对)都说要将加密的密码存储在cookie中用户名.然后,每次PHP检查当前用户是否未登录时,请检查其cookie并查找这些值.如果用户名与密码匹配,则表示您已进入.
对我而言,这是一个巨大的安全漏洞.如果有人要破解数据库或以某种方式访问加密密码,他们甚至不需要破解它们.只需设置自己的cookie即可.我是正确的,还是只是偏执狂?
我的登录系统使用会话来跟踪当前用户ID,并使用1/0进行快速登录/注销检查.用户无法编辑会话AFAIK,因此这是安全的(如果不是,请告诉我).我只想将会话ID存储在cookie中,以后再恢复它,但这也不安全.
我非常关心用户的安全性,如何在保持功能正常的网站的同时妥善保护他们的信息?
我对Laravel相当新,并且对于记住我的功能有一个疑问.
我通过在Auth :: attempt方法中附加第二个参数来成功启用"记住我"功能.
if (Auth::attempt(array('email' => $email, 'password' => $password), true))
{
// The user is being remembered...
}
Run Code Online (Sandbox Code Playgroud)
如文档中所述,这样可以无限期地记住我或直到用户手动注销.
我基本上想要设置"记住我"功能的过期日期.
看一下控制台,我可以看到启用"记住我"会生成一个remember_ {HASH} cookie.
覆盖此cookie中指定的过期日期的最佳方法是什么?Cookie目前设置过去的日期,这使它永远持续下去.
请记住,我必须在sessions.php中设置'lifetime'=> 0,以便我可以根据用户偏好触发记住我的功能,因此将此更改为一周在我的情况下不起作用.
谢谢!
我一直在使用ASP.NET Identity 2.2.1.以下是VerifyCode操作的post方法中的代码.
var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent: model.RememberMe, rememberBrowser: model.RememberBrowser);
switch (result)
{
case SignInStatus.Success:
return RedirectToAction("Dashboard","Index");
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid code.");
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
当model.RememberMe和model.RememberBrowser都为true时,浏览器会记住Identity和两个因子cookie 2周.这是默认实现.
但我只需要记住TFA 8小时.我怎样才能做到这一点?
自从过去10天以来,我一直在寻找解决方案,但我还没有找到解决方案.任何帮助将非常感激.
以下是我的StartUp类中的代码.它只是没有生效.
public partial class Startup
{
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create); …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc remember-me two-factor-authentication asp.net-identity-2
刷新令牌的想法是,如果访问令牌被泄露,因为它是短暂的,攻击者有一个有限的窗口滥用它.
我明白了,但是如果攻击者访问刷新令牌,他们将能够获得一个新的身份验证令牌,我错了吗?这似乎只是推迟了长期存在的令牌安全漏洞......
关于这一点,你会在同一个答案中找到:
刷新令牌(如果受到攻击)是无用的,因为除了刷新令牌之外,攻击者还需要客户端ID和机密才能获得访问令牌.
那么使用刷新令牌和简单地辞职之间的区别是什么?如果您不希望用户再次重新输入,那么如何存储客户端ID和密码?
正如@FStephenQ指出的那样,刷新令牌只能使用一次:攻击者将能够获得一个新的身份验证令牌,但只能获得一次,而且只能获得一次.但是,一旦你使用了新的刷新令牌,你如何获得新的刷新令牌呢?如果你使用一个新的,那么攻击者也可以刷新他们的令牌......
实际问题是:如何让我的用户登录?在我使用的应用程序上,一旦我登录,我就不必再次登录了:他们是如何进行的?