0

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

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

感谢您的回复

4

4 回答 4

2

恐怕有人可以写一本关于它的书...

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

于 2012-07-26T20:19:18.910 回答
1

可以做各种各样的事情来使网站更安全,但即使你做了所有这些事情,你也不能保证你的网站是“完全”安全的。

例如,如果您将用户登录信息存储在数据库中:您是否针对 SQL 注入进行了保护?如果您的登录页面还包含一个注册表单:您是否有针对 XSS 攻击的保护?密码是否必须满足最低要求,或者用户可以自己制作(通常非常糟糕且容易猜到)密码?有些事情您可以自己掌握,但不幸的是,在某些事情被实际利用之前,您不会想到要保护它们(因为没有人会想到它们)。一个站点有无数的攻击路线,以及相同数量的防御方法,我要花很长时间才能深入研究所有这些路线(并不是说我自己就是那么精通安全)。

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

于 2012-07-26T20:24:16.977 回答
0

是的,密码字段和 https 绝对是登录的好方法。我现在也想不出别的办法,除了可能是验证码,以确保它不是机器人脚本,试图猜测密码。

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

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

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

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

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

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

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

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

于 2012-07-26T20:19:27.170 回答
0

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

我的建议:不要自己做。每种可能的语言都有大量的安全框架。选择一个,阅读他们的操作指南页面并使用它。它将帮助您完成最常见的任务。但是应用程序的安全性并没有在登录页面上结束。整个应用程序应该被保护写得正确以得到保护。

于 2012-07-26T21:57:00.387 回答