【问题标题】:How do I handle user authorization the safest way?如何以最安全的方式处理用户授权?
【发布时间】:2011-03-03 00:36:54
【问题描述】:

我正在开发一个小型网站,我将允许用户创建帐户,但在授权安全方面我一无所知。

我已经使用 codeigniter 在 PHP 中构建了我的项目,并找到了一个可以为我处理授权的库 (Tank Auth)。它以安全的方式存储密码,但我仍然担心用户将密码发送到我的服务器时的部分。

一种简单的方法是在请求后发送密码,但我猜想嗅探这样的密码很容易。在将密码发送到我的服务器之前,我应该在客户端对密码做些什么吗?有没有什么好的 javascript 库呢?

【问题讨论】:

  • 您需要在这里考虑的一件事是,如果用户关闭了 javascript(这是一种可能性——NoScript 最近变得越来越流行),那么您的数据可能就是全部错了。
  • 那是真的.. 从来没想过,很好的意见。
  • 但是,您可以优雅地不处理任何 javascript:只需像往常一样发送用户名/密码,然后使用它进行身份验证。当然,这对他们来说意味着不那么安全……但是,好吧,如果他们不想要 JavaScript,那么你无能为力(好吧,你可以编写一个 Flash/Java 小程序……但是…… )

标签: php security codeigniter login authorization


【解决方案1】:

正如其他人所说,SSL 是首选方式。

David Wotever 提到了散列 - 对此过程有详细的讨论 here

另一种方法是完全依赖外部提供商为您处理身份验证 - openid 是最明显的候选者。

HTH

C.

【讨论】:

  • 关于散列过程的讨论很好。此外,为 OpenID +1。很好的电话。
【解决方案2】:

您可以随意使用客户端哈希,但通常认为通过安全 (HTTPS) 连接发布凭据就足够了。

这仍然存在 MITM 攻击的可能性……但是对 SSL 连接执行 MITM 攻击并非完全是微不足道的,因此它可能不是您需要太担心的攻击媒介。

【讨论】:

  • 好吧,对于我纯粹的爱好项目来说,SSL 有点贵。如果我在客户端和服务器之间以纯文本形式发送密码,你们会认为我的安全性很差,还是可以在较小的网站上这样做?
  • @Irro:我只会在帐户并不重要的网站上这样做,并且只有当您告诉您的用户密码不安全并且他们应该为您使用唯一密码时地点。一些用户倾向于对所有内容使用相同的密码,这与您使用它的最容易破解的地方一样安全。如果其中一个条件对您来说是错误的,并且 SSL 太昂贵,那么您就会陷入客户端加密的困境,这会增加身份验证的复杂性并且本身就有安全问题。
  • 是的,它的安全性很差……但如果它只是一个爱好项目,它可能并不重要。当我注意到我使用的爱好网站不使用 SSL 时,我不会太在意(但这主要是因为我为每个网站使用了不同的密码)。
  • Wotever:不是每个人都像你一样认真和精通技术。
【解决方案3】:

您说 SSL 对您来说太贵了,但大多数主机都免费提供。昂贵的部分是获得私有 IP 地址和正式证书。

但是,您可以创建自己的证书,这意味着所有详细信息仍然可以安全传输,只是您的身份无法得到保证。正如 David Wolever 所提到的,MITM 攻击更难进行。无论如何,对于业余爱好网站来说可能不是问题。

一旦(如果)您的网站不再是一种爱好,那么您就可以投资购买有保证的证书。

【讨论】:

    【解决方案4】:

    通过 SSL 进行身份验证可能是最简单和最安全的方式。

    如果你用 rot13 等加密它。它很容易撤消。

    如前所述,您需要确保您网站的安全性不依赖于 Javascript,因为它很容易被关闭。

    在客户端执行的任何其他操作都很容易被破坏。

    【讨论】:

    • 客户端操作很容易被破坏是不正确的。可以进行适当的客户端散列,这确实会产生一个相当安全的系统:如果服务器发送 nonce 并且客户端以 H(nonce + password) 响应,那么重放攻击是不可能的,并且很难恢复密码.
    • 正如我在另一条评论中提到的,SSL 对我来说有点贵。您认为小型网页可以以纯文本形式发送密码吗?其他非 SSL 网页如何处理?
    • 如果我正在监听客户端和服务器之间的对话,我不仅有 nonce,而且还有 nonce+password 的输出。这样我就不必让任何一方来破解密码。我需要做的就是执行字典攻击或暴力破解它,但我仍然有密码。当javascript也被关闭时会发生什么?我不考虑使用 nonce 作为安全的身份验证方法。
    • 请参阅我上面的评论。不使用 SSL。有些页面会使用客户端散列,这总比没有好……但是,不幸的是,大多数页面什么都不做。
    • @Cetra:nonce 有两个目的:一个是充当盐的一种形式……但是,正如您正确指出的那样,盐只会使哈希更能抵抗大规模破解,而不是单个破解.然而,nonce 的真正目的是防止重放攻击。这意味着攻击者无法在未来的某个时间重用值H(nonce + password)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2017-02-19
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    相关资源
    最近更新 更多