【问题标题】:Is it safe to store a OTP in the session?在会话中存储 OTP 是否安全?
【发布时间】:2010-12-10 02:03:14
【问题描述】:

我正在编写一个网络应用程序,对于某些操作,用户需要输入一次性密码 (OTP) - 类似于大多数银行网站。

所以我基本上需要生成一个随机字符串,将其存储在某处,将其发送给用户,然后根据我存储的密码验证输入的密码。

将这个生成的字符串存储在 ASP Session 对象中是否安全?

【问题讨论】:

    标签: c# asp.net security session


    【解决方案1】:

    不要存储 PIN。散列它(SHA 算法之一,最好用一些盐)并存储散列。然后将用户输入的哈希值与您存储的哈希值进行比较。然后,如果您的存储(无论是在会话对象中、某个数据库中还是其他任何地方)遭到破坏,攻击者就不会知道 PIN 是什么。

    【讨论】:

      【解决方案2】:

      请注意,任何内存中的会话数据都不能传输到网络场中的其他网络服务器,因此如果该站点需要扩展,那么您可能希望将 OTP 关闭网络服务器。当然,除非您使用粘性会话。

      【讨论】:

        【解决方案3】:

        Session 是客户端无法访问的服务器端集合(与 cookie / viewstate 不同)。它应该不受客户端操纵。

        不过,我认为您应该将这些 OTP 存储在数据库中并与它们进行比较。

        【讨论】:

        • 为什么要将 OTP 存储在数据库中?我只想做最简单可行的事情?
        • 如果用户关闭浏览器,去喝杯T恤然后返回并完成任务怎么办?会话变量将丢失。但是,如果这正是您想要的,那么会话就可以了。
        • 是的,这正是我想要的。我知道在网络农场中使用 Session 的问题。
        猜你喜欢
        • 2010-12-28
        • 2015-05-15
        • 1970-01-01
        • 2013-11-04
        • 2018-05-10
        • 2014-10-27
        • 2018-02-19
        • 2018-07-05
        • 1970-01-01
        相关资源
        最近更新 更多