0

我在做这个时遇到了一些困难。

我有一个登录 HTML 表单,我想知道用户和密码是否与我的 MySQL 服务器中的信息匹配。

最好的方法是什么?

非常感谢你

4

3 回答 3

4

我知道这个问题现在有点老了,但我想我会为后代回答。

我想你有几个选择。

一种选择是根本不使用 HTML::Mason 进行密码验证。这是我们过去常做的。由于您的 HTML::Mason 页面可能在 Web 服务器中运行,您可能可以使用它来验证您的用户名和密码。例如,如果您使用 Apache 和 mod_perl 为您的站点提供服务,则有几个用于身份验证的模块,包括一个可以与 MySQL 对话并针对具有用户名和密码列的用户表进行验证的模块。检查Apache 2.2的mod_authn_dbd文档。我推荐这种方法。

另一种方法是使用像Catalyst这样的框架。Catalyst 已经拥有用于执行您需要的身份验证的插件,如果您尝试在 Mason 中 100% 执行,它将使您不必考虑您需要为自己编写代码的大部分问题。您仍然可以使用 HTML::Mason 作为您的页面模板。

如果您已经下定决心使用 HTML::Mason 进行身份验证,那么我会这样做:

  • 在您希望保护的文件夹中放置一个自动处理程序 - 请注意,所有子文件夹都将获得相同的身份验证保护

  • 在自动处理程序的 <%init> 块中,检查 cookie 中的有效会话令牌。如果不存在,将 ($m->redirect) 重定向到您的登录表单。否则,什么都不做——自动处理程序将继续运行并且页面将被提供。

  • 在您的登录表单处理程序中,在 <%args> 块中提取用户名和密码。使用用户名,从数据库中检索散列密码。提取盐,将其添加到用户提供的明文密码中并重新散列。然后比较哈希字符串。如果它们不匹配,则重定向回登录页面并显示错误。否则通过。

如果上述部分内容没有意义,请在本网站上查看“盐渍密码”等。正如原始回复者指出的那样,将明文密码存储在数据库中是不好的业力。:-)

于 2009-12-20T22:54:49.187 回答
2

创建一个 Mason 组件,该组件使用 DBI 针对 MySQL 验证您的用户名/密码组合,如果在 %ARGS 哈希中传递用户名和密码,则返回 true 或 false。然后在登录表单的顶部加载该组件,使用返回值来确定是显示登录表单还是重定向到您的内容。

于 2009-12-19T13:25:00.180 回答
1

始终存储密码的哈希值。当您必须验证用户凭据时,对用户输入的密码进行哈希处理,并将其与特定用户对应的哈希密码值进行比较。

于 2009-11-27T02:01:26.100 回答