【问题标题】:php post password routines?php发布密码例程?
【发布时间】:2010-02-17 13:22:21
【问题描述】:

我很想知道如何保护 php 密码的安全。

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

我一直在检查其他网站如何做到这一点,例如Facebook。当我登录 facebook 时,我根本看不到我的密码,它看起来就像一个长加密字符串。

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

干杯 柯

【问题讨论】:

    标签: php encryption passwords


    【解决方案1】:

    查看HTTPS protocol

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

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

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

    【讨论】:

    • 这是 Facebook 使用的——Facebook 通过 SSL 让您登录,然后将您重定向回普通的旧 HTTP,并使用会话让您保持登录状态。
    【解决方案2】:

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

    JavaScript 伪代码:

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

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

    【讨论】:

      【解决方案3】:

      根据 Select0r,我这样做是为了在提交后不更改 *-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;
      }
      

      【讨论】:

      • 这不保护任何东西。攻击者只需捕获 md5 哈希(顺便说一句。md5 已知冲突)并将其发送到页面以便登录。页面的有效密码是 md5 哈希。
      猜你喜欢
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 2014-07-29
      • 2010-10-29
      • 2020-11-03
      • 1970-01-01
      相关资源
      最近更新 更多