维护用户登录和信息的安全数据库?
Posted
技术标签:
【中文标题】维护用户登录和信息的安全数据库?【英文标题】:Maintaining a secure database of user logins and info? 【发布时间】:2010-07-25 04:23:37 【问题描述】:我想在我正在构建的慈善网站上拥有一个登录表单(它是为朋友准备的,我正在旅途中学习),并且我想知道我应该学习哪些语言/软件来为用户构建数据库登录名和信息?注意:对于具有中等编程经验的人来说,它必须安全且相对易于学习。
更新:我知道 CMS 为登录等提供了很好的工具,但我想自己做这一切。
【问题讨论】:
【参考方案1】:您可以做的最简单的事情是在将密码输入数据库之前对密码进行哈希处理和加盐。 《恶跳蚤》在另一个问题here中有一个很好的答案。
您是否考虑过购买现成的 CMS?大多数体面的 CMS 应该包含一个简单的慈善网站所需的所有功能。它还可以为您的登录表单问题提供可靠的解决方案。
编辑
至于使用什么语言。只要您对它感到满意并愿意投入时间和精力,这真的不是很重要。它在您的个人资料中显示您正在寻找学习 php。看起来用 PHP 编写登录表单将是一个不错的起点。至于数据库后端。同样,这并不重要。请不要使用 MS Access。大多数 PHP 开发人员(假设)似乎都使用 mysql,因为它通常包含在 PHP 网络主机中。
关于安全性,散列和在密码中添加盐是您可以做的最简单的事情。你可以这样做:
用户点击注册链接 使用 SSL 生成注册表单 一旦用户点击提交按钮 哈希密码。加盐。存储在数据库中。在您的哈希密码中添加盐将防止攻击者使用rainbow table 暴力破解您的密码。查看here 了解处理哈希密码的函数。 您还可以强制用户使用特定规则创建密码。比如,要求所有密码大于6个字符,至少一个数字等...一旦用户需要登录,您可以执行类似的操作:
获取用户名并对其进行清理。记住永远不要相信用户的输入。上帝是否想要在您的网站上拥有一个帐户并不重要。 转义密码以确保没有帐户的人可以通过SQL injection 访问。您可以使用 PHP 的 mysql_real_escape_string 函数来做到这一点。 一切就绪后,您可以查询数据库以查看是否返回了任何行。最后,切勿以纯文本形式通过电子邮件向您的用户发送密码。如果用户忘记了密码,只需让他们创建一个新密码。您可以通过在用户的电子邮件中向用户发送一个链接来做到这一点,这将使他们能够这样做。
老实说,您最好的选择可能是完成此任务并使用您的代码在 SO 上发回(新问题)。从那里我们可以分析它并从那里获取它。
类似的东西应该可以满足您的要求。
【讨论】:
很好的答案,所以 +1,但我不想使用 CMS。我应该更具体 我知道这乍一看可能令人生畏。但是,正如我建议的那样,尝试一下。如果您遇到困难,请回到 SO。 :) @Rafe Kettler:如果您选择 PHP,这篇 Password Hashing 文章解释了一些概念并提供了示例代码。我还敦促您使用 mysqli::prepare prepared statements 而不是动态 SQL(假设您使用 MySQL - 但同样的想法适用于其他数据库引擎)。以上是关于维护用户登录和信息的安全数据库?的主要内容,如果未能解决你的问题,请参考以下文章