Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 以安全的方式向服务器发送密码_Php_Security_Ssl_Encryption_Login - Fatal编程技术网

Php 以安全的方式向服务器发送密码

Php 以安全的方式向服务器发送密码,php,security,ssl,encryption,login,Php,Security,Ssl,Encryption,Login,我目前正在为我的一个网站开发一个更好的登录例程,我希望能够安全地向服务器发送登录数据。关于这个话题有好几篇文章和帖子,但他们经常对如何做到这一点有不同的看法 从SSL开始,这里的每个人都站在同一个页面上:你应该使用SSL,我使用。然后有人说:“这就足够了,使用SSL您可以以明文形式发送username&PW”。我不同意。其他人说,它仍然应该被散列。我读了几篇文章,我觉得人们关心登录例程的不同方面,并提出了只处理他们的安全方面的机制 所以我想知道的是,到目前为止我所阐述的常规是否足够,是太多还是太

我目前正在为我的一个网站开发一个更好的登录例程,我希望能够安全地向服务器发送登录数据。关于这个话题有好几篇文章和帖子,但他们经常对如何做到这一点有不同的看法

从SSL开始,这里的每个人都站在同一个页面上:你应该使用SSL,我使用。然后有人说:“这就足够了,使用SSL您可以以明文形式发送username&PW”。我不同意。其他人说,它仍然应该被散列。我读了几篇文章,我觉得人们关心登录例程的不同方面,并提出了只处理他们的安全方面的机制

所以我想知道的是,到目前为止我所阐述的常规是否足够,是太多还是太少。我将尝试解释为什么我选择实现某个功能,以及我尝试涵盖的安全方面:

  • SSL:
  • 服务器和客户端之间的通信应该始终是https://-尽管我读了几篇文章警告说SSL“不是银弹”,但这是一个良好的开端

  • 哈希PW客户端(SHA3、ARGON2i、BCRYPT):
  • 许多评论确实拒绝了hasing PW。使用散列,将其与数据库中的散列PW进行比较,只需将PW从userinput更改为散列—攻击者仍然可以通过简单地获得散列来访问。我同意。但是(这就是我的意思,人们阅读了关于安全性的不同方面)那些声称它比发送明文更好的人,因为在这种情况下,只有您的系统,而不是具有相同PW的其他系统会受到危害(当然,除非他们也使用哈希PW)。所以,在通过SSL发送密码之前,我将实现密码的哈希

  • 加密哈希:
  • 假设SSL无法隐藏我们发送到服务器的数据,攻击者会读取散列的PW。我能想到的调整安全性以适应这种情况的唯一方法是使用服务器预先发送的密钥加密(例如AES CBC)客户端哈希PW,该密钥的有效期很短。密钥必须随机生成。这样,服务器就可以解密数据,然后将散列与数据库中的散列进行比较

    总而言之:

    ->客户端希望通过SSL登录->服务器发回密钥->客户端对PW哈希进行哈希加密->客户端使用密钥加密哈希,随机IV->服务器使用密钥解密数据(存储在$u会话中,带有过期时间戳),并将哈希与数据库中的哈希进行比较(如果过期时间戳仍然有效)


    这是一个好办法吗?还是这太过分了?(会有太多的安全性吗?)或者您有其他解决方案吗?

    SSL很好,我不知道您为什么不同意。客户端散列仍然使PW在客户端和散列上都可见,因此没有任何收获

    问题归根结底是,“你在保护什么?”我的猜测是,你没有保护任何比银行更需要安全的东西,而且可能比银行要安全得多


    你花了很多时间试图在这里重新发明轮子,而不是依靠久经考验的方法。坚持已经证明的方法。

    SSL很好,我不知道你为什么不同意。客户端散列仍然使PW在客户端和散列上都可见,因此没有任何收获

    问题归根结底是,“你在保护什么?”我的猜测是,你没有保护任何比银行更需要安全的东西,而且可能比银行要安全得多

    你花了很多时间试图在这里重新发明轮子,而不是依靠久经考验的方法。坚持已经证明的

    ->客户端希望通过SSL登录->服务器发回密钥->客户端的PW哈希->客户端使用密钥加密哈希,随机IV->服务器使用密钥解密数据(存储在$u会话中,带有过期时间戳),并将哈希与数据库中的哈希进行比较(如果过期时间戳仍然有效)

    为什么要加密散列?这意味着散列不够安全。好吧,好吧,我们开始吧。因此,让我们假设攻击者能够读取散列,这就是您希望使用附加层对其进行保护的原因。如果攻击者能够读取散列,那么他们也能够读取服务器发送给客户端的密钥,以及包含加密算法的Javascript(假设您在这里讨论的是HTML场景)。现在,攻击者拥有复制和反转加密的一切,事实上,他们可能还能够首先更改从服务器发送到客户端的Javascript

    为了防止这种情况发生,您需要一些包装器来保护客户端和服务器之间的所有通信,例如,哦,嗯,比如说…SSL。
    由于SSL已经保护通信不受第三方干扰…您认为您在添加额外的歌曲和舞蹈时到底添加了什么?我告诉你:没什么

    ->客户端希望通过SSL登录->服务器发回密钥->客户端的PW哈希->客户端使用密钥加密哈希,随机IV->服务器使用密钥解密数据(存储在$u会话中,带有过期时间戳),并将哈希与数据库中的哈希进行比较(如果过期时间戳仍然有效)

    为什么要加密散列?这意味着散列不够安全。好吧,好吧,我们开始吧。因此,让我们假设攻击者能够读取散列,这就是您希望使用附加层对其进行保护的原因。如果攻击者能够读取散列,那么他们也能够读取服务器发送给客户端的密钥以及包含加密算法的Javascript(