我根本不是一个PHP程序员,主要做javascript / design,但是我正在修改其他人制作的PHP代码,我想知道以下内容:
在如下的config.php文件中将md5()中的基本登录密码存储有什么意义吗?
define("USERNAME", "username");
define("PASSWORD", md5("password"));
我可以理解,常量将被加密存储,当它与登录尝试进行比较时,它将是这样的:
if(PASSWORD == md5($_SERVER['PHP_AUTH_PW'])) ...
但是,我很难看到在这种情况下使用加密有任何好处,因为它不发送加密数据,而只是用它来比较登录尝试。有人可以告诉我,如果我错了吗?
答案 0 :(得分:1)
只要代码显示原始密码,您就无法获得任何收益。
如果只在脚本中存储哈希,那么有权访问代码的人就无法看到原始密码,因此无法登录。
define("PASSWORD", 'db21e1fe1bf92b66ef2363d3c76c62d5');
if (PASSWORD = MD5($_SERVER['PHP_AUTH_PW']))
MD5不是哈希密码的好选择,你应该使用预先计算的BCrypt值,你可以调用函数password_hash()来计算它。
define("PASSWORD", '$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa');
if (password_verify($_SERVER['PHP_AUTH_PW'], PASSWORD))
答案 1 :(得分:0)
如果只有一个用户,并且他/她的凭据存储在php脚本中,那么是的,根本没有理由调用md5()。 除了一个特定情况,当您出于某些原因可以在公共可访问页面上执行var_dump(PASSWORD)。 但无论如何,从一开始,这是一个错误的架构。
答案 2 :(得分:0)
md5是一种加密方法。它加密普通密码并以加密形式存储在数据库中。所以没有人可以滥用它。是的,在比较登录时,我们需要md5。密码插入必须是md5。如果md5密码存储在数据库中。 希望你理解逻辑。
答案 3 :(得分:0)
我们使用散列来保护应用程序免受可能的漏洞(如文件下载漏洞),即使您的网络应用程序是安全的,并且您使用的是共享主机,他们也可以使用符号来查看php源文件。 / p>
如果你的密码是经过哈希处理(md5 ......等),那么他正在寻找你的密码的时候他会试图破解它(破解强制哈希)或检查哈希数据库。
只有在使用大字符串&时,您的哈希才会受到保护(任何哈希类型)不要使用在线哈希工具(他们会将您的哈希和字符串出售给哈希数据库)。
由于受欢迎程度,不建议使用md5。没有必要使用
define("PASSWORD", md5("password"));
if(PASSWORD == md5($_SERVER['PHP_AUTH_PW'])){ echo 'validpass'; }
就像你告诉攻击者'嘿,我的密码是密码常数'
你应该在php中手动散列密码
<?php
echo md5('YourPassHere').PHP_EOL;
//a9903eab80299592904956c9f966f4c1 == YourPassHere
?>
复制哈希&amp;把它放进去(当然你不要使用md5();因为你已经哈希密码了)
define("PASSWORD", "a9903eab80299592904956c9f966f4c1");
并离开
if(PASSWORD == md5($_SERVER['PHP_AUTH_PW'])) { print 'valid pass';}