安全登录页面和用户会话

时间:2012-07-26 20:11:57

标签: session login security

我的第一个问题是关于提供安全登录页面的标准步骤。我熟悉的两件事是设置密码字段以防止有人监视,以及通过https传输数据。为了拥有一个完全安全的登录站点,是否还应包含其他任何内容?

此外,一旦我们登录,会话如何维护,即当用户点击时我们的服务器知道它应该再次生成基于用户的内容?考虑到什么时候登录,我们还需要维护https和其他安全措施吗?

感谢您的回复

4 个答案:

答案 0 :(得分:2)

我担心会写一本关于它的书......

仅解决会话问题:会话通常由每个连续请求发送的cookie维护。并且,无论用户是否登录的信息都不基于会话cookie(或独立用户cookie),因此可以使用被盗cookie来模拟登录。因此,您需要为会话的其余部分维护https连接(以保护cookie)或至少采取一些小的安全预防措施(例如验证会话是否来自与以前相同的IP地址)。

答案 1 :(得分:1)

为了使网站更安全,可以采取各种措施,但即使您完成了所有这些工作,也无法保证您的网站“完全”安全。

例如,如果您将用户登录信息存储在数据库中:您是否提供了针对SQL注入的保护?如果您的登录页面还包含注册表单:您是否有针对XSS漏洞利用的保护?是否存在密码必须满足的最低要求,或者用户是否可以制作自己的密码(通常非常糟糕且易于猜测)?有一些事情你可以掌握在自己手中,但总有一些事情,不幸的是,你不会想到要防止(因为没有人会想到它们),直到它们被实际利用。一个站点有无数的攻击路径,以及相同数量的方法来防范它们,我需要花费太长时间才能深入研究它们(并不是说我自己都是那些了解安全的人)。 / p>

正如其他答案所指出的,会话由会话ID维护,会话ID存储在客户端的cookie中。会话启动时,会生成ID;然后,客户端的浏览器使用此ID将服务器端存储的数据标识为属于该浏览器。为防止此ID被盗,应使用HTTPS加密连接;但是,需要注意的是,如果您对页面中的外部资源有任何引用(例如:来自其他站点的图像,来自其他站点的脚本等),则连接只会部分加密(即,不是外部资源的部分)。由于显而易见的原因,这比完全加密安全性低;为了防止这种情况,我尽可能将所有外部资源下载到本地目录中。

答案 2 :(得分:0)

是的,密码字段和https绝对是登录的好方法。 我现在也想不出任何其他事情,除了可能是一个Captcha,以确保它不是机器人脚本,试图猜测密码。

关于会话管理: 有一个'$ _SESSION'变量,它对每个连接都是唯一的,并且在你调用'session_start();之后自动由PHP维护。在剧本的开头。

此命令非常重要,否则$ _SESSION将始终为空...如果我没有弄错,它会向浏览器询问标识信息(SessionID或类似的东西),然后匹配存储的该会话ID的信息。

您可以像使用任何其他Superglobal一样使用此会话变量。

$_SESSION['ID'] = $ID;
$_SESSION['AccessRights'] = $AR;

等等。 实际会话数据仅在服务器端存储,除了PHP脚本之外不能更改。在$ _SESSION中存储您需要了解的有关用户的所有内容,您应该没问题。

关于“保持HTTPS”:这不应该是必要的,因为所有“关键数据”都已经转移。

请注意,一旦您处理敏感或个人数据(如更改密码或类似内容),您可能需要再次返回HTTPS。 然而,根据经验,在当今的系统中,HTTPS的实际开销相当小,除非你期望有大量的流量,否则保持“开启”并不是一个坏主意。

现在,关于这个问题,我可能是错的,但这是我对此事的看法。

答案 3 :(得分:0)

正如@Kuba所说 - 这是一个很大的话题。会话固定,会话存储,保护cookie,密码安全,无效登录的响应时间,以非安全方式访问登录页面,XSS,sql注入以及可能还有其他数千个我不知道。

我的建议:不要自己动手。每种可能的语言都有很多安全框架。选择一个,阅读他们的howto页面,然后使用它。它将帮助您完成最常见的任务。但是应用程序的安全性不会在登录页面上结束。整个申请应妥善保管,以确保安全。