将用户名和密码存储在加密文件而不是数据库

时间:2016-04-16 02:40:58

标签: php mysql webserver

所以我知道你会说这很糟糕,但我真的不喜欢使用数据库,因为它同时令人困惑和困难。我还认为在文件中存储用户名和密码是不好的,但用户名和密码都将使用md5加密。我不认为这是足够安全,但因为即时通讯将公开。如果你能给我一些关于如何做到这一点的提示,请告诉我。

此外,您每分钟只会尝试两次;) 这是我的想法:https://drive.google.com/file/d/0B19YDO3uT0ClaVZsYjRFRVZkUzA/view?usp=sharing

另外,如果您能举例说明如何以及在何处将文件存储在网络服务器中?说实话,我对php不太好

3 个答案:

答案 0 :(得分:2)

大多数数据库都可以从开放的Web访问,您也必须将数据库密码存储在PHP文件中。因此,在大多数配置中,使用数据库没有安全优势。这只是一种更舒适的操作。

哈希密码总是一个好主意,应该被视为理所当然。 md5 不是安全算法。请考虑使用password_hash()。当您的哈希文件被盗时,不要忘记散布盐串以防止彩虹表格附件。

任何双向加密都会让您的系统完全不安全,因为您必须将解密的秘密保存到服务器上的纯文本中,攻击者才能窃取所需的一切。

限制登录尝试肯定不是一个坏主意,但是,它并不像你想象的那么重要。主要的缺点是获得对哈希文件的读访问权,然后处理离线暴力,最好使用彩虹表。

答案 1 :(得分:0)

这是我的建议。不要使用md5,因为它不安全,too fast不使用迭代。

您必须拥有SSL证书才能确保人们看到密码。没有证书的任何东西大致相当于发送原始文本密码的用户。你基本上只是改变了他们的密码。

正如zaph所指出的,pin the certificate

的最佳做法

在客户端

  • 将密码发送到Web服务器(由证书加密)

在网络服务器上

答案 2 :(得分:0)

您需要使用密码哈希算法,该算法也会使用盐并进行迭代,以便哈希需要大量时间,例如100毫秒。通常,您可以使用PDKDF2bcryptscriptpassword_hash等算法。

密码必须在服务器上进行哈希处理。

使用HTTPS通信密码并在应用程序中固定服务器证书,固定很重要,因为它可以防止MITM攻击。

可能没有必要使用DB,这是查找时间和磁盘I / O的问题。如果/需要性能,您可以从平面开始并迁移到数据库。 “鲍勃叔叔”马丁推迟使用FitNesse中的数据库,最终发现只需要一个平面文件解决方案。

注意:基本上所有简单的哈希方法,如SHA2,SHA3等都要快,需要多次迭代才能增加计算时间。时间很重要,因此攻击者无法快速尝试哈希。每个密码需要一个随机(不完全唯一)的盐来消除使用预先计算出的哈希值的彩虹表。