2013-09-28 234 views
-1

首先,我在Google上搜索并没有找到任何帮助解决我的问题。md5返回空字符串

我正在使用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 [ '登录']和$ _ POST [ 'MD5']

的问题是,$ _ POST [ 'MD5']是空的。所以我试图回应它的大小,它看起来0!

我没有失望,有什么缺失?错误?

谢谢

+0

'buf = MD5(pass);'''MD5'函数在哪里? –

+2

在通过网络传输密码之前,不要打扰哈希密码;你不会因此获得任何安全。如果我可以捕获密码哈希,我也可以捕获会话cookie或使用彩虹表来找出密码。改用HTTPS。 – Oswald

+1

请勿使用MD5进行散列密码。 –

回答

2

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

此外,Javascript不带有内置的MD5功能。

最重要的是:一个无盐MD5哈希与纯文本密码本身一样不安全 - 它只是稍微更努力地扫描整个密码空间。

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