2010-10-27 53 views
1

我做了一个简单的web应用程序,其中很多事情都是在不刷新窗口的情况下完成的。现在我遇到了一个我以前没有意识到的问题。如果我找不到解决方案,我将不得不重新设计整个应用程序,这将花费很多时间,并可能会使用它的一些凉爽。哎哟。好的,回到问题。是否可以在不刷新窗口的情况下进行“密码”验证?

为了揭示 - 比方说 - 网站的“秘密”部分,用户必须输入一种...密码并点击“确认”。但我不知道如何存储密码以防止用户阅读,例如在网站的源代码中。

目前,我使用mysql数据库 - 我连接它,在PHP中读取密码并将其存储在全局JavaScript变量中。但是进入源代码后它当然是可读的。

是否有可能做这样的事情?是否可以秘密检查密码而无需刷新网站并使用PHP进行检查?

回答

6

我推荐你在实施之前询问。这些日子里似乎很少有人这样做。

首先,信不信由你,你不想在任何地方实际存储密码。你想使用一种叫做salted hash的东西。使用这种技术,您最终得到一个基于密码的随机查找代码,并可用于验证用户是否拥有他们所说的密码。

其次,您将要使用Ajax请求在Javascript中为您执行此检查。我更喜欢使用JQuery这个库,因为它提供了一个非常好的,跨平台的,经过测试的,易于使用的包装器,它使得这些东西变得很容易。

+0

这就是我说的:) – Ariejan 2010-10-27 13:25:50

+0

这是一个很好的想法......但重新设计似乎不可避免,但为什么? - 好的,我可以通过制作“盐腌散列”来检查密码,但“网站的秘密部分”内容又如何呢?我希望它在检查密码之前也是隐形的......而这正是哈希法无法解决的问题。呃......或者也许有一种方法? – kremuwa 2010-10-27 13:39:26

1

您可以使用MD5或SHA1编码密码,为您提供32或40个随机字符的字符串。这个字符串是非常难(不是不可能),以反转到原始密码。

MD5和SHA1具有给定值始终会导致相同散列值的属性。例如。如果你将“stackoverflow”散列到123ABC,并且你在另一台机器上再次执行它,该机器也将产生123ABC。

因此,只需对用户使用相同算法输入的密码进行编码,就可以比较两个哈希值。如果它们匹配,密码是正确的。

1

我已经在python中实现了一个这样的应用程序并采用了以下方法
1)通过向后端发送ajax post请求来执行一次性身份验证。你可以使用库(jQuery,道场等)或简单的JavaScript,我选择了后者。
2)验证成功后,使用uuid库生成一个随机唯一的ID,我们称之为会话ID。 Php有以下uniqid库,应该为你做这件事
3)将此会话ID存储在cookie和/或变量中
4)将会话ID和用户ID存储在memcache或数据库中以检查会话活跃。

我知道php有一个内置的session handling mechanism所以第2步将被修改,并且为你完成3 & 4的繁重工作。

相关问题