当前位置:首页 > 日记 > 正文

PHP永久登录,请记住我的功能实现和安全实践

PHP永久登录,请记住我的功能实现和安全实践
永久登录是指连续验证之间的浏览器会话机制。换句话说,谁是登录用户的今天仍处于登录状态,即使用户会话过期之间多次。永久登录的存在降低了你的验证机制的安全性,但增加了可用性,而不是麻烦的用户进行身份验证,每一次,他们提供了一个选择记住登录。

根据我的观察,最常见的有缺陷的永久登录方案是在Cookie中保存的用户名和密码。诱惑,这样做是可以理解的-你不需要提示用户输入用户名和密码,你只要读他们从饼干。验证过程的其他部分完全一样的正常登录,所以该方案是一个简单的解决方案。

但是,如果您确实存在于用户名和密码的cookie中,请立即关闭该功能,并阅读本节的其余部分,以找到实现更安全计划的一些想法。您还需要询问将来使用cookie的所有用户修改其密码,因为它们的身份验证信息已被公开。

永久登录需要永久登录cookie,通常称为COOKIE,因为饼干是唯一的标准机制,用来提供多个会话之间的稳定的数据。如果cookie提供永久访问,这将引起严重的风险,你的应用程序的安全,所以你需要确保你的数据保存在cookie只能用于在有限的时间内认证。

第一步是设计一个方法来减轻由捕获的永久登录cookie造成的风险。尽管饼干被捕获,你需要避免,但深层防御过程是最好的,尤其是因为这一机制将即使一切操作正常减少验证的安全。这样的Cookie不能基于任何提供永久登录信息生成的,如用户密码。

为了避免使用用户密码,您可以创建只对一个验证有效的标识:

复制代码代码如下所示:

< PHP

$令牌= MD5(uniqid(RAND(),真的));

>
您可以将其保存在用户会话中,使其与特定用户相关联,但这并不能帮助您在多个会话之间维护登录。这是一个主要前提,因此,您必须使用不同的方法将这个标识与特定的用户相关联。

因为用户名和密码是不敏感的,你可以把它放在饼干,这有助于验证用户ID的验证提供了更好的方式,但是,是使用第二身份ID不容易猜找到。考虑增加三字段数据表存储用户名和密码:第二身份标志(标识),永久登录标识(令牌),和一个永久登录超时时间(超时)。

复制代码代码如下所示:

描述用户;

+ + + + ------------ ------------------ ------ ----- --------- ------- + + +

场型空| | | |关键|默认|额外|

+ + + + ------------ ------------------ ------ ----- --------- ------- + + +

| |用户名varchar(25)| | PRI | | |

| |密码varchar(32)是| | |空| |

| |标识符varchar(32)是多空| | | | |

| |令牌varchar(32)是| | |空| |

| |超时int(10)符号是空的| | | | |

+ + + + ------------ ------------------ ------ ----- --------- ------- + + +
通过生成和保存第二个身份ID和一个永久登录ID,您可以创建一个不包含任何用户身份验证信息的cookie。

复制代码代码如下所示:

< PHP

盐= 'shiflett美元;

标识符= MD5(盐)。MD5($用户名)。(盐);

$令牌= MD5(uniqid(RAND(),真的));

$超时=()+ 60 * 60 * 24 * 7;

setcookie('auth ',$标识符:$标记

>
当用户使用永久登录cookie时,可以检查它是否符合几个标准。

复制代码代码如下所示:

< PHP

*(mysql_connect)* /

*(mysql_select_db)* /

$ =数组();

$ =数组();

现在=时间();

盐= 'shiflett美元;

列表($标识符,$标记)=爆炸(':',_cookie美元{ 'auth});

如果(ctype_alnum($标识符)ctype_alnum($标记))

{

{ } =清洁'identifier美元美元的标识符;

{ } =清洁'token美元美元令牌;

}

其他的

{

**…

}

{ } =美元'identifier MySQL的mysql_real_escape_string($清洁{ 'identifier});

$选择用户名、令牌、超时

从用户

这里的标识符={ } } { 'identifier MySQL美元';

如果($结果= mysql_query($ SQL))

{

如果(mysql_num_rows($结果))

{

记录= mysql_fetch_assoc美元($结果);

如果美元'token'} {(清洁!= $记录{ 'token})

{

*登录失败(错误令牌)。

}

($现在>记录{ 'timeout美元'})

{

登录失败(超时)

}

($清洁{ 'identifier}!=

MD5(盐)。MD5($记录{ 'username}。(盐))

{

*登录失败(无效标识符)。

}

其他的

{

成功登录

}

}

其他的

{

*登录失败(无效标识符)。

}

}

其他的

{

错误

}

>
您应该坚持三种方法来限制永久登录cookie的使用。

1、cookie需要在一周内过期(或更少)。

2、曲奇最好只用于一次验证(在成功的验证被删除或更新之后)

三.一周(或更少)服务器端cookie的到期时间。

如果您希望用户不受限制地记住,只要用户对应用程序的访问大于到期日期,只需在每次验证之后重新生成标识并设置一个新cookie即可。

另一个有用的原则是,在用户执行敏感操作之前,用户必须提供密码。您只能允许永久登录用户访问不敏感的应用程序。在执行某些敏感操作之前,让用户手动验证是不可替代的步骤。

最后,你需要确认注销系统的用户实际上是登机,包括永久登录cookie的删除:

复制代码代码如下所示:

< PHP

setcookie('auth ','deleted!时间());

>
在这个示例中,cookie对于填充和立即过期的值是无用的,这样一来,即使用户的时钟不允许cookie保持有效,也可以保证其有效退出。

相关文章

2015最哲学和最经典的人格签名不是

2015最哲学和最经典的人格签名不是

最经典,人格,哲学,主流,电脑软件,1。总有一个人,一句对不起,让你心痛,刻骨铭心。 2。伤了心,忘了爱,拼了命,挽回不了曾经破碎的一次。 三.有没有一个人你说过要放弃无数次,但最后他们还是舍不得。 4。解释总是多余的,因为知道你的人不需要它。 5。…

Javascript判断变量是否为自定义函数共享

Javascript判断变量是否为自定义函数共享

变量,空值,自定义函数,电脑软件,Javascript,Javascript本身没有判断变量是否为空值的函数,因为变量可能是字符串、对象、数字、布尔等。不同的判断方法是不同的,因此本文编写了一个函数,用来判断js变量是否为null,如果它是未定义的,NULL,楠,false,0,{,},空字…

用PHP将图像转换成ASCII码的一种方

用PHP将图像转换成ASCII码的一种方

方法,图像,转换成,电脑软件,PHP,本文介绍了一种用PHP将图像转换成ASCII码的方法,供大家参考: PHP图片被转换成ASCII码,图片可以通过字符串直接显示。 ASCII码 体{ 线高度:0; 字体大小:1px; } 图像=图像为美元; 如果启用HTTP allow_url_fopen / …

过多关注别人,无法过QQ空间的自我空

过多关注别人,无法过QQ空间的自我空

空间,自我,电脑软件,QQ,空间的微语录,写下人生的愤怒和悲伤,酸甜,记录自己变化的心情。 不要太敏感,不太柔软,太过敏感,软心肠的人,当然不高兴,别人只是一句话,你要胡思乱想一整天。灵敏度和柔软的心是因为他们关心别人太多,不能从自己的生活,想想别人…

如何向朋友询问QQ空间音乐QQ常见问

如何向朋友询问QQ空间音乐QQ常见问

音乐,常见问题,空间,朋友,电脑软件,如何向朋友询问QQ空间音乐 第一步:在音乐库中找到你喜欢的音乐,点击歌曲右边的音乐服务按钮; 第二步:请QQ好友(朋友/朋友单独),点击确认; 让路 礼品数量 使用时间长度 评论 免果岭费 1次 31天 同一首歌已…

调用在javascript中的应用场景

调用在javascript中的应用场景

应用场景,调用,电脑软件,javascript,在一些jQuery插件经常看到类似的callback.call(XXX,XXX)虽然读说电话和应用功能可以改变的范围,但仍然不是很透彻了解的变化范围是解决什么问题,没有办法,或者说2个主要的功能是为了解决什么问题,应用场景,当使…

超级悲伤经典签名

超级悲伤经典签名

悲伤,经典,电脑软件,以下是你所编的超级悲伤经典人物签名的全部内容。如果您喜欢小编辑器的建议,请继续关注它。 我们都不能运行时间,我们只能通过自己的昨天运行。 感情像野草,倔强是不可改变的。 世界上只有两种人,一种是不断的接受,另一种是…

PS图象处理软件如何美白张图的牙齿

PS图象处理软件如何美白张图的牙齿

图象,处理软件,牙齿,电脑软件,PS,PS图象处理软件如何让一张图片的牙齿美白很多新手都不是很清楚,下一个小编辑为您详细介绍,让我们看看它 有些照片很漂亮,但是牙齿是黄色的,这影响了整体的美观,但没关系,我们可以用PS给牙齿美白的图片,现在我们要…

jQuery的获得方法和网页含有缘边界

jQuery的获得方法和网页含有缘边界

网页,方法,边界,宽度,高度,本文说明了jQuery获取边界的高度与宽度和网页含有边缘。分享给你供你参考。以下是如下: $(文档)Ready(函数(){) $(按钮)。Click(函数(){) ; txt + =宽度的div:+ $(# DIV1)。Width()+; txt + =高度的div:+ $(# DIV1)。Height()+; txt + =外宽…

ps调整像素、格式和大小的方法

ps调整像素、格式和大小的方法

调整,方法,像素,大小,格式,本教程将介绍ps来调整图片的像素、格式和大小。基于本教程,对初学者来说是非常新的学习。推荐朋友一起学习。 当使用网络上传图片时,网络经常询问图片的大小。现在,学习如何调整图片的大小。 调整图片像素大小(大小)…

PS图象处理软件将创建一个漂亮的年

PS图象处理软件将创建一个漂亮的年

图象,创建一个,处理软件,特殊效果,新鲜,搅拌时不要匆忙调色。首先,分析材料和图片的合适风格,然后选择你想要的颜色,然后你可以找到一些好的图片作为参考,然后逐渐将主颜色变成所需的颜色。 搅拌时不要匆忙调色。首先,分析材料和图片的合适风格…