【问题标题】:Validating User Oracle Passwords for Reset application验证重置应用程序的用户 Oracle 密码
【发布时间】:2011-01-22 19:02:50
【问题描述】:

这是编程和系统管理员的混合体,但我认为这更像是一个编程问题。

目前正在构建用于管理 Oracle 用户帐户 (C#) 的密码管理 Web 应用程序。

范围要求在允许用户设置新密码之前验证用户 Oracle 用户名和密码。如果不创建用户密码表(散列或其他方式,这是一个安全风险),我如何验证旧用户密码?

我当前的解决方案是尝试使用用户指定的用户名/密码连接到数据库。在这方面的太多尝试会将用户锁定在 Oracle 端,因此暴力破解不太可能。这里是否还有其他我遗漏的安全风险,或者是否有更好的方法来处理这个问题?

我们使用 AD 作为主要身份验证,但 AD 帐户未绑定到 Oracle 帐户,因此这只是初步检查。

应用流程(如果有帮助):

  1. AD 检查正确的域(Int​​ranet)
  2. 用户输入 Oracle 用户名/密码
  3. 输入旧密码、新密码+确认
  4. 如果密码正确,请重置密码

【问题讨论】:

  • 您能否解释一下为什么应用程序不能直接从用户输入中获取密码,以该用户身份连接,并在以用户身份连接后更改密码?
  • 这实际上是我的问题。通过获取用户输入并以该用户身份连接来检查用户身份验证是否有效,或者这是否存在安全风险?如果它是有效的,我到目前为止已经完成了这项工作,并且找不到任何明显的问题。

标签: asp.net oracle passwords forgot-password


【解决方案1】:

调用 Alter User 时,您可以添加 Replace 关键字,这样只有在您输入正确的旧密码时它才会更改用户(例如,alter user userName 由 newPassword replace oldPassword 标识。)在某些情况下,这不会导致如果您输入了错误的旧密码,则会出现错误,但如果遇到问题,您可以查找它们。

【讨论】:

    【解决方案2】:

    正如 dpbradley 建议的那样,我将使用提供的凭据连接到数据库。如果成功,让他们更改密码。

    【讨论】:

    • 这似乎是最好的解决方案,到目前为止运行良好。
    【解决方案3】:

    散列 Oracle 密码的算法是众所周知的,duplicate 并不难。因此,您可以获取用户的条目,使用相同的算法对其进行哈希处理并将其与哈希值匹配。该值在 11g 之前的 DBA_USERS 中可见,否则在 SYS.USER$ 中可见。

    这种方法的危险在于使散列可用允许暴力破解密码(这就是 11g 使散列值不那么可见的原因)。

    【讨论】:

    • 不希望为应用程序提供那种能力/访问权限。不过,对于未来的使用来说是个好主意。谢谢。
    猜你喜欢
    • 2011-01-03
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2012-06-24
    • 2015-12-07
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多