2010-02-17 45 views
4

我非常有兴趣了解如何确保php密码安全。php post密码例程?

主要问题是:如何从登录表单中将密码作为安全字符串发布?

我一直在检查其他网站如何执行此操作,例如Facebook的。当我登录Facebook时,根本没有看到我的密码,只是看起来像是一个很长的加密字符串。

如何在发布之前将密码字段转换为加密字符串?这是用ajax完成的吗?

干杯 柯

回答

4

检查HTTPS protocol

超文本传输​​协议安全HTTPS)与所述SSL/TLS协议的超文本传输​​协议的组合,以提供加密和安全服务器的标识。 HTTPS连接通常用于万维网上的支付交易以及公司信息系统中的敏感交易。 HTTPS不应与RFC 2660中指定的安全HTTP(S-HTTP)混淆。

如果您的网站无法启用HTTPS并且不想发布明文密码(出于明显的安全原因),请考虑使用Challenge-Response Authentication

只需google for various PHP/Javascript implementations并选一个你喜欢的。

+0

这是Facebook的使用 - Facebook的日志您通过SSL,然后将您重定向回普通的旧HTTP,并使用会话保持您的登录状态。 – Josh 2010-02-17 13:29:31

2

如果您不能使用安全连接,则可以在发送之前加密密码。

JavaScript的伪代码:

onSubmit: 
    PASSWORDFIELD.value = md5(PASSWORDFIELD.value) 

你再对客户端的MD5加密的口令,然后发送到你的服务器(没有必要使用AJAX)。在服务器端,您会将其与存储在数据库中的加密密码进行比较,以检查用户是否被授权。

0

根据Select0r我做了这个不submiting后更改* -s的计数:

onSubmit='encrypt_pass(this)' 

function encrypt_pass(form){ 
    form.pass_md5.value = md5(form.pass.value); //needs a hidden pass_md5 field 
    var stars = ""; 
    for(i=0;i<form.pass.value.length;i++) 
     stars = stars+"*"; 
    form.pass.value = stars; 
} 
+0

这不能保证安全。攻击者只会捕获md5散列(btw.md5具有已知的冲突)并将其发送到页面以便登录。页面的有效密码是md5散列。 – 2016-03-16 22:14:32