PHP登录表格安全

时间:2016-07-26 08:36:33

标签: php security session

由于我对这种安全问题不熟悉,因此我搜索了这篇文章,但我仍有一些疑问。

状况

我正在为一家公司开发一个网站(当然主要使用PHP),我需要保护所有页面。我已经创建了一个登录表单,我在数据库中使用md5加密密码。我想到了这个:

  1. 登录表单。如果用户使用正确的用户名进行身份验证 密码,创建$_SESSION["logged"] = 1;
  2. 现在你被记录了。在网站的每个页面中,我检查$ _SESSION ["已记录"]是否已设置且值是否为1.如果是,则显示页面内容。
  3. 通过这种方式,如果您尝试在网站中打开随机页面而不进行日志记录,我可以显示错误页面(因为当我检查$_SESSION["logged"]时,我看到它未设置/它没有& #39; t 1)的值。

    问题(S)

    我没有存储在客户端,我正在做服务器端的一切,我想知道这种方法是否足够安全。我已经看到人们使用过这种方法,但我也读过他们会在会话中加密数据。这真的需要吗?

    我也想知道:当用户(登录后)关闭网站和浏览器时,会话是自动销毁还是我必须处理关闭时调用session_destroy();的内容?

    正如我已经说过的那样,我对这些东西有很多经验,但我想在服务器方面做得更好。我不想使用cookies。

4 个答案:

答案 0 :(得分:3)

MD5为absolutely not suitable,用于加密密码"。您的流程将不安全,您的客户将容易受到攻击。查看password_hash作为绝对最低限度。

  

我没有存储在客户端,

也许您不熟悉会话的工作方式。客户端计算机上会有 cookie 。您可以使用优于默认的会话名称/密钥生成器such as whirlpool来提高此Cookie的安全性。

您的安全性最重要的是使用TLS层,例如Lets Encrypt,这是一个免费社区支持的TLS层并且相当安全(实际上它看起来非常安全,但我不能相信那些免费的东西是如此的好,所以我坚持拒绝一点点的判断!)

您还 需要告诉PHP您正在使用TLS 这非常重要,您需要编辑php.ini文件以告知PHP仅使用HTTP和会话的加密Cookie,例如session_set_cookie_params

根据您的问题判断,您真的更喜欢使用Prepared Statements并完全限定数据库交互,以避免SQL注入和数据库泄露。

Session_destroy相对毫无价值,不再关心它。您想要使用的是定期运行session_regenerate_id,通常每隔几页加载一次(比如5)。

进一步阅读:PHP Sessions and Security

最后的想法

  

正如我已经说过的那样,我对这些东西有很多经验

然后,您将错过任何内容,犯错并且您的客户网站受到滥用或妥协的风险可能会增加。

最重要的想法

  • 信誉良好的证书颁发机构获取TLS证书。获取服务器管理员以帮助您正确安装和设置域的证书。

修改

This is a good link to read

答案 1 :(得分:1)

无论你做什么看起来都对我有用..你的问题的答案:

  • 管理会话的服务器端方法是安全的。您可以将会话保持为未加密状态,因为您只将登录用户的状态存储在其中。
  • 当用户关闭网站时,您不会在服务器上收到任何事件。要结束会话,您应该:
    • 调用session_destroy();退出行动
    • 设置较短的会话超时,以便在指定的不活动时间后自动销毁会话
  • 在会话
  • 的情况下,在服务器端执行所有操作会更好

使用MD5的提示:

  • 使用MD5加密密码是不安全的,因为它不是一个强大的加密算法。请改用mcrypt或其他PHP方法。

答案 2 :(得分:0)

好吧,我建议你在会话中保存你的用户ID。为什么?您可能需要获取有关用户的信息,然后使用此会话可以获得与您的用户相关的所有信息。如果您有注销页面,则应在注销页面中使用session_destroy()。如您所见,当您关闭使用会话建立的网站并再次打开时,您需要再次登录。所以你不需要使用session_destroy(实际上不能)。我真的不知道你为什么要加密会话信息,对不起。我听说,有可能参加会议,但我对此不太了解,抱歉:/ Can session value be hacked?在这里你可能会找到一些信息。

答案 3 :(得分:0)

首先:2016年,不要使用MD5进行密码登记,因为它不安全。

最好至少使用SHA1,更好的是SHA256或更高版本的密码。如果你想让它更安全,SHA 256将是一个良好的开端。

考虑使用TLS证书... Let's encrypt对大多数网站来说都是免费的。

发布您的代码,也许有人能够帮助您朝着正确的方向前进。

祝你好运!