标签: remember-me

在PHP中使用"记住我"功能的正确方法

在登录系统上工作并尝试实现记住我的功能.

最近,我做了关于这个主题的研究,阅读了一堆文章,帖子,故事,小说,童话(称之为,因为其中一些甚至不包含1行代码,只是大量的单词),cookie漏洞如固定,劫持......等

并决定实现以下目标

  1. 设置登录尝试之间的时间延迟(以防止暴力攻击)并限制尝试次数
  2. 几乎在每个操作上重新生成会话ID

我真的很困惑我的主要问题:哪种方式是正确的,为了"记住我"的功能?使用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)

php cookies session login remember-me

15
推荐指数
2
解决办法
1万
查看次数

如何使用Devise:记得吗?

我正在制作Rails应用程序.
我想实现一个"记住我"复选框,以便用户在下次使用Devise:rememberable时跳过输入密码.但我无法弄清楚如何实现.
如果您对此有任何想法,请向我展示一些示例代码.

ruby-on-rails remember-me devise

15
推荐指数
2
解决办法
1万
查看次数

ASP.NET MVC RememberMe

搜索了很多后我没有得到任何答案,最后我不得不回复你.下面我详细解释我的问题.这太长了,所以请不要放弃阅读.我用简单的语言解释了我的问题.

我一直在开发一个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角色和成员身份错误的整个概念.我已经说明了我想要的东西.我认为这很简单合理.

我做了什么

  1. 使用用户名,密码登录表单并记住我的字段.
  2. 我在web.config中的设置:

    <authentication mode ="Forms">
    <forms loginUrl ="〜/ Account/LogOn"timeout ="2880"/>
    </ authentication>

  3. 在我的控制器动作中,我有这个:

    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先生所做的博客文章所示.

非常感谢您的帮助.提前致谢.

asp.net-mvc remember-me

13
推荐指数
1
解决办法
3万
查看次数

记住我在Symfony2中不起作用的功能

我已经实现了在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根本没有设置.怎么解决这个?

已解决:见下面的答案

remember-me symfony

13
推荐指数
2
解决办法
1万
查看次数

使用FormsAuthentication持久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时使用的默认时间长度是多少?

asp.net cookies forms-authentication remember-me

13
推荐指数
1
解决办法
2万
查看次数

Remember Me如何在Spring Security中工作?

我很好奇Remember Me如何工作以及它如何在Spring Security中运行?

我知道服务器会向客户端发送长期存在的cookie.然后客户端发回cookie,服务器可以识别客户端,因为服务器上有关系的哈希映射cookie --> session.

我不明白服务器[服务器端应用程序]在服务器[Tomcat]重新启动后如何通过cookie识别客户端.

Spring Security cookie-session在服务器关闭之前如何以及在何处保存地图?它是特定于服务器的(即Tomcat,Jetty等发生了不同的事情)吗?

PS弹簧安全和重新部署的另一个相关问题:即使我没有打勾RememberMe并登录,我仍然可以在重新部署约3分钟后得到认可.它可以修复吗?

java tomcat spring-security remember-me

12
推荐指数
2
解决办法
7709
查看次数

PHP"记住我"安全漏洞?

我正在编写一个"记住我"的登录表单,到目前为止我读过的教程(部分是为了确保我做得对)都说要将加密的密码存储在cookie中用户名.然后,每次PHP检查当前用户是否未登录时,请检查其cookie并查找这些值.如果用户名与密码匹配,则表示您已进入.

对我而言,这是一个巨大的安全漏洞.如果有人要破解数据库或以某种方式访问​​加密密码,他们甚至不需要破解它们.只需设置自己的cookie即可.我是正确的,还是只是偏执狂?

我的登录系统使用会话来跟踪当前用户ID,并使用1/0进行快速登录/注销检查.用户无法编辑会话AFAIK,因此这是安全的(如果不是,请告诉我).我只想将会话ID存储在cookie中,以后再恢复它,但这也不安全.

我非常关心用户的安全性,如何在保持功能正常的网站的同时妥善保护他们的信息?

php security login remember-me

12
推荐指数
1
解决办法
2657
查看次数

Laravel 4记住我过期时间

我对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,以便我可以根据用户偏好触发记住我的功能,因此将此更改为一周在我的情况下不起作用.

谢谢!

php cookies remember-me laravel laravel-4

12
推荐指数
1
解决办法
7821
查看次数

更改默认ASP.NET身份双因素记住Cookie过期时间

我一直在使用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

12
推荐指数
1
解决办法
3720
查看次数

如何安全地让我的用户使用刷新令牌登录?

来自/sf/answers/504648441/:

刷新令牌的想法是,如果访问令牌被泄露,因为它是短暂的,攻击者有一个有限的窗口滥用它.

我明白了,但是如果攻击者访问刷新令牌,他们将能够获得一个新的身份验证令牌,我错了吗?这似乎只是推迟了长期存在的令牌安全漏洞......

关于这一点,你会在同一个答案中找到:

刷新令牌(如果受到攻击)是无用的,因为除了刷新令牌之外,攻击者还需要客户端ID和机密才能获得访问令牌.

那么使用刷新令牌和简单地辞职之间的区别是什么?如果您不希望用户再次重新输入,那么如何存储客户端ID和密码?


正如@FStephenQ指出的那样,刷新令牌只能使用一次:攻击者将能够获得一个新的身份验证令牌,但只能获得一次,而且只能获得一次.但是,一旦你使用了新的刷新令牌,你如何获得新的刷新令牌呢?如果你使用一个新的,那么攻击者也可以刷新他们的令牌......


实际问题是:如何让我的用户登录?在我使用的应用程序上,一旦我登录,我就不必再次登录了:他们是如何进行的?

security authentication api remember-me auth-token

12
推荐指数
1
解决办法
4084
查看次数