【问题标题】:User security in the database of my website我网站数据库中的用户安全
【发布时间】:2011-03-20 01:55:26
【问题描述】:

假设我有一个网站 mysite.com 将存储一些敏感的个人数据(与银行相关) 在这个网站上,我有一个带有用户表的 oracle 数据库,它将存储来自 mysite.com 的用户的登录名和密码

我有几个问题:

我应该如何存储密码,当然是加密,但是哪个?

注册流程是怎样的?发邮件确认真的有必要吗?

一般登录过程有什么好的建议吗?

有关信息,我正在使用 Oracle APEX

【问题讨论】:

  • 这可能是本周第 4 或第 5 个“我如何存储密码”问题。

标签: oracle security authentication encryption cryptography


【解决方案1】:

您正在存储与银行相关的敏感个人数据。不要破解自己的解决方案。使用现有的、经过验证的解决方案。在处理此类数据时,您很可能还会遇到各种安全和隐私法律、法规和责任。找一个了解这些规定并且可以为您提供帮助和建议的人。

不要自己尝试这样做。 “任何人都可以建立一个他们自己无法破坏的安全系统。” - 我认为这是 Bruce Schneider 的名言。注意。

编辑以对评论做出反应:

即使在处理私人金融软件时,您也可能在处理银行帐号、社会保险号等。所以你可能仍然遇到各种规定。

OpenID 和 Oracle SSO 等系统仅涵盖身份验证。法规还规定了有关如何在数据库中存储数据、如何处理备份、如何处理访问数据库的人员(例如开发人员)等方面的最低安全措施。如果您不遵守这些规定而出现问题,您将承担责任。

我真的强烈建议您向该领域的知识渊博的人寻求帮助。向他们解释你想做什么,你想存储什么,等等。他们可以告诉您适用的法规(如果有的话)。只有这样,您才能开始考虑如何实现这一点以及可以使用哪些现成的组件。

【讨论】:

  • 当我说它与银行相关时,我的意思是像 Mint.com,而不像 HSBC.com。 Oracle SSO 或 OpenID 是否足够安全?
【解决方案2】:

看看this question的答案。

【讨论】:

    【解决方案3】:

    在任何情况下都不应加密密码。使用加密意味着存在解密功能,这将违反 CWE-257。密码必须始终经过哈希处理,SHA-256 是一个很好的选择。密码应该用cryptographic nonce 加盐。考虑到您依赖的其他安全系统时,身份验证系统非常简单。

    您必须非常小心以确保您的系统没有 SQL 注入。我建议获取 Acunetix($) NTO Spider ($$$) 或 wapiti(开源)的副本。无论如何,参数化查询是要走的路。

    【讨论】:

      【解决方案4】:

      密码应存储为加盐哈希。为每个使用独特的盐。对于散列,有更好的选择,但 SHA1 可用于多种用途(可通过 DBMS_CRYPTO 获得)。最好选择 SHA256(使用 http://jakub.wartak.pl/blog/?p=124)。

      用户注册确认确实取决于网站。如果您想快速让用户加入,您可以在注册后允许他们在有限的时间内加入,直到他们点击激活链接。真正让您获得的所有激活都是与用户关联的真实电子邮件地址。还可以考虑使用验证码来防止自动/脚本式注册。

      在一些无效尝试后登录应该强制执行临时锁定(并在连续锁定时提醒管理员)。也强制密码复杂性。

      OWASP 对安全 Web 应用程序设计有很好的一般性建议。 维基百科有一些关于Oracle Apex Security 的信息。另一条评论建议使用 Web 测试工具,例如 Acunetix 或 NTO Spider(我建议使用Burp),还有一个通过分析源代码来测试 Apex 应用程序安全性的工具(ApexSec)-(披露,我为这家公司工作)。

      您还可以考虑对您的应用程序进行第三方视图,例如渗透测试或代码审查。 Web 应用程序防火墙可以根据您的上下文提供一些价值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 2015-12-07
        • 1970-01-01
        • 2012-03-27
        相关资源
        最近更新 更多