在查询字符串中使用长哈希来识别动态文档的安全性

时间:2010-10-09 16:18:59

标签: php javascript jquery security

我正在开发一个生成练习程序打印输出的小型webapp。用户(即私人教练)可以创建锻炼计划,然后输入他们的一个客户的电子邮件地址。然后,练习程序的链接将被发送到客户端,就像这样......

http://www.myurl.com/generate.php?hash=abiglonghash...

哈希是一个sha512字符串。

我不希望人们能够轻松发现其他人的锻炼计划。与此同时,当我们点击该链接时,我宁愿避免提示用户输入其他密码信息等。我希望客户点击他们电子邮件中的链接,立即获取他们的程序,不用大惊小怪。

我想知道上述安全性有什么想法,没有额外的身份验证?我知道这不是Fort Knox,但对我来说这似乎是一个典型的“忘记密码”系统。关于如何改进这一点的任何想法和建议,而不是进入全面的用户身份验证?

提前致谢,

4 个答案:

答案 0 :(得分:1)

“忘记密码”系统通常会做一些事情:

  • 一旦你到达页面,就要求你“知道”一些东西(比如你妈妈的娘家姓,你的高中等)
  • 通过电子邮件向您发送新密码。即使您到达另一个用户的“忘记密码”URL,新密码也会发送到该用户的电子邮件地址。这意味着你需要访问他们的收件箱,以及他们的“秘密问题”

出于您的目的,SHA512字符串应该足够安全。在理论上,使用SHA512类似于使用UUID。它足够长,在统计上不太可能有人猜到别人的哈希值。它发生的可能性是天文数字。

当然,总有比猜测更容易获取别人哈希的方法。像用户的浏览器历史记录,拦截他们的网络流量,看着他们的肩膀等等。只有SSL与保护登录系统相结合才能防止这些事情发生。

答案 1 :(得分:0)

安全总是会提出这样的问题。显然,让所有想要的人保持下去的唯一方法就是让每个人都出局!但这不会起作用。

如果你有兴趣做的只是将用户的锻炼程序隐藏在另一个用户的锻炼程序中,那么你所做的事情根本不是问题,也没有安全问题。

如果有人猜测(或调查并发现)到另一个锻炼计划的链接,那么您无法通过系统阻止它。如果这是一个问题,那么你将不得不想出另一种方法来了解你让谁进入。如果你不关心那些积极尝试去参加别人的锻炼计划而只是试图阻止这种情况的人偶然发生,那你没问题。

答案 2 :(得分:0)

从技术上讲,它与登录/密码对一样安全,每个32个字符,即非常。甚至强制随机记录都不是一种选择。在你找到一个工作哈希值之前,每秒有十亿用户和十亿次暴力攻击,它需要超过宇宙年龄的10 ^ 100倍。

在实践中还有其他考虑因素,例如缓存代理,浏览器历史记录等。我建议不要使用重要数据来做这件事,但它实际上就是你如何向用户展示和解释它。

答案 3 :(得分:0)

我认为只要你不允许那些“神奇的代币”继续永远地工作,这不是一个坏主意。您应该将令牌存储在数据库中并跟踪它们是否已被使用。一旦客户使用魔术令牌到达系统,他们真的应该创建一个带有用户名和密码的“普通”帐户,就像互联网上的其他每个站点一样。在使用之后,令牌应标记为“已使用”,并且应禁止进一步使用它。