PHP POST密码例程?

4

我非常想知道如何保护php密码的安全性。

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

我一直在查看其他网站如何做到这一点,例如Facebook。当我登录Facebook时,我根本看不到我的密码发布,它只是一个长加密字符串。

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

谢谢 Ke

3个回答

4

请查看HTTPS协议

超文本传输安全协议 (HTTPS)是将超文本传输协议和SSL/TLS协议结合使用,以提供服务器的加密和安全身份验证。 HTTPS连接通常用于万维网上的支付交易和企业信息系统中的敏感交易。 不应将 HTTPS 与在RFC 2660中指定的安全HTTP(S-HTTP)混淆。

如果您无法为站点启用HTTPS并且不想发布明文密码(出于明显的安全原因),请考虑使用挑战响应身份验证

只需在谷歌搜索各种PHP / JavaScript实现,然后选择一个您喜欢的即可。


这是Facebook使用的方式--Facebook通过SSL将您登录,然后将您重定向回普通的HTTP,并使用会话使您保持登录状态。 - Josh

2
如果无法使用安全连接,可以在发送前对密码进行加密。
JavaScript伪代码:
onSubmit:
  PASSWORDFIELD.value = md5(PASSWORDFIELD.value)

您将在客户端上拥有一个MD5加密的密码,然后将其发送到您的服务器(无需使用AJAX)。 在服务器端,您将比较它与存储在数据库中的加密密码,以检查用户是否已获得授权。


0

根据Select0r的建议,我已经修改了代码,以确保在提交后不更改*的计数:

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;
}

这并没有保证任何安全性。攻击者只需捕获md5哈希值(顺便说一下,md5存在已知的碰撞),然后将其发送到页面以登录。页面的有效密码就是md5哈希值。 - con-f-use

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接