【问题标题】:Flaws in attempt at securely sending post data with PHP尝试使用 PHP 安全发送帖子数据的缺陷
【发布时间】:2011-01-26 22:38:31
【问题描述】:

这是我学习/理解安全(ish)发送帖子数据的骇人听闻的尝试。欢迎提出建设性的批评。

这只是理论,没有多少代码。另外,我在示例中使用了 PHP 的 SHA1(),只是因为我花时间了解了它的内部结构。我知道还有其他(更好的?)算法(例如:MD5())所以换成你最喜欢的。

1) 服务器生成随机盐 rand(min, max),根据请求将其与页面一起发送,计算并存储 SHA1(un:pw:salt) 以及请求的服务器时间戳(到数据库)

1a) 注意:salt 是可嗅探的,所以假设黑客知道 salt(你能取消 SHA1() 的东西,以获取 SHA1 的数据吗?)

2) 用户输入用户名和密码点击提交

3) 提交会触发一个 SHA1(un:pw:salt) 的 JavaScript 函数(为混淆而打包,是的,我知道,这不会增加真正的安全性),然后只将结果发布到服务器

3a) 注意:加密的凭证是可嗅探的

4) 服务器检查接收到的凭据是否与它存储在数据库中的凭据匹配,并到达 在初始请求后的一个时间范围内(5 分钟左右)。做出允许/拒绝决定。

进一步的请求会改变盐,所以即使有人嗅到了加密数据,它也无用 a) 用户提出新页面请求 b) 期限到期

想法?

编辑:另外,假设所有的条形标签/SQL hacks/等...注入都得到了适当的处理。

【问题讨论】:

  • 我认为只有使用 https 才是真正的安全
  • 是的,当然除非。好点。
  • 您不能“un-sha1”某些东西来获取密码。这是一个不可逆的散列函数,所以你必须暴力破解散列。 (哦,md5 被认为不太安全。)

标签: php security post


【解决方案1】:

使用 https 并继续下一个问题!

【讨论】:

  • https 并不总是可用的。我遇到了一些小客户,这里有一家餐馆,那里有一家纹身店,他们不想为 SSL 支付额外费用,而他们所需要的只是对任何人都无用的非常小的东西。这里的安全不是为了保密交易,更像是有一些隐私感。
  • 您可以以每年 11 美元或更少的价格获得 SSL 证书 - 我见过一些免费的。如果您接受警告,您甚至可以扮演自己的角色。
  • @jason - SSL 很便宜,比如 20 美元的证书可以在任何地方使用,或者免费的 startcom 证书可以在 Firefox(或其他有一次性警告的地方)工作。
  • 我知道 SSL。我对这种设置的破坏方式更感兴趣。
【解决方案2】:

这有点像“摘要”身份验证对 HTTP 的工作方式。

如果你有兴趣学习,read more about the Digest Authentication method.

摘要式身份验证确实可以防止中间人了解用户密码。但是,它很容易受到嗅探器也可以改变流量的攻击。主动攻击者可以让用户提供凭据,但可以随意修改请求的正文。

此外,正如您所描述的那样,服务器存储用户的密码。这是不好的。基于密码的身份验证应该只存储从密码中不可逆地派生出来的内容

我建议您使用 SSL 并学习如何对服务器端存储的密码进行哈希处理。

【讨论】:

  • 非常酷的回复。我没有考虑过攻击者拦截然后改变流量。编辑:你说“服务器存储用户的密码。这很糟糕。基于密码的身份验证应该只存储从密码中不可逆转地派生的东西。”。请参见步骤 1)“...计算并存储 sha1(un:pw:salt)”。除非我弄错了,否则我以为我按照您的建议做了。不过,我可能会遗漏一些东西,我会考虑的。
  • @jason - 我以为你为每个请求都选择了一个新的盐,所以你每次都需要密码(“生成一个随机盐......,根据请求将它与页面一起发送”)。但如果你这样做一次,就在他们设置密码的时候,那就没问题了。但是,您希望每个请求都有一个“nonce”,以防止重放攻击。我以为这就是你使用“盐”的方式。
猜你喜欢
  • 2011-10-26
  • 2011-09-06
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 2016-11-21
相关资源
最近更新 更多