-1

首先我在谷歌上搜索并没有找到对我的问题有任何帮助。

我正在使用 MAMP 在本地服务器上工作,并且正在按照教程尝试使用 md5 保护 php 页面。

在我的 login.php 页面中有一个带有登录/密码字段的表单,它在提交时调用 JS 函数:

<form id='log' method='post' action='templates/auth.php' onsubmit='javascript:submit_pass();'> 
<input type='hidden' name='md5' /> 
<table align='center'> 
<tr><td>Login</td><td><input name='login' /></td></tr> 
<tr><td>Mot de passe</td><td><input type='password' name='passwd' /></td></tr> 
<tr><td colspan='2' align='center'><input type='submit' value='Login !' /></td></tr> 
</table> 
</form>

提交时调用的 login.js 脚本:

function submit_pass()
{
  pass=document.forms['log'].passwd.value;
  document.forms['log'].passwd.value="";
  buf=MD5(pass);
  document.forms['log'].md5.value=buf;

  return true;
}

然后它通过 POST 将参数发送到 auth.php

所以我在字段中输入一个随机的登录名和密码。

在我的 auth.php 页面上,我回显 $_POST['login'] 和 $_POST['md5']

问题是 $_POST['md5'] 是空的。所以我尝试回显它的大小,它显示为 0!

没看懂,是不是少了点什么?错误的?

谢谢

4

2 回答 2

1

不要在客户端上散列密码。它不会提高安全性,因为没有任何改变:服务器现在只能看到 MD5 哈希和用户名,如果我能截获它,我就拥有了登录所需的一切!因为服务器只能检查MD5。

此外,Javascript 没有内置 MD5 函数。

最重要的是:未加盐的 MD5 哈希与纯文本密码本身一样不安全 - 扫描整个密码空间只需要稍微多一点努力。

如果您真的想提高密码安全性,您必须使用 SSL 进行客户端-服务器通信(否则任何内容都以明文形式发送),并且在服务器上您应该使用PHP 5.5的新的闪亮的password_hash()函数进行散列(并且有一个兼容性库允许您从 PHP 5.3.7 开始执行此操作)。

于 2013-09-28T18:47:34.100 回答
0

对于密码,您应该使用 crypt()。http://php.net/manual/en/function.crypt.php

于 2013-09-28T19:25:08.177 回答