【发布时间】:2010-12-10 02:03:14
【问题描述】:
我正在编写一个网络应用程序,对于某些操作,用户需要输入一次性密码 (OTP) - 类似于大多数银行网站。
所以我基本上需要生成一个随机字符串,将其存储在某处,将其发送给用户,然后根据我存储的密码验证输入的密码。
将这个生成的字符串存储在 ASP Session 对象中是否安全?
【问题讨论】:
标签: c# asp.net security session
我正在编写一个网络应用程序,对于某些操作,用户需要输入一次性密码 (OTP) - 类似于大多数银行网站。
所以我基本上需要生成一个随机字符串,将其存储在某处,将其发送给用户,然后根据我存储的密码验证输入的密码。
将这个生成的字符串存储在 ASP Session 对象中是否安全?
【问题讨论】:
标签: c# asp.net security session
不要存储 PIN。散列它(SHA 算法之一,最好用一些盐)并存储散列。然后将用户输入的哈希值与您存储的哈希值进行比较。然后,如果您的存储(无论是在会话对象中、某个数据库中还是其他任何地方)遭到破坏,攻击者就不会知道 PIN 是什么。
【讨论】:
请注意,任何内存中的会话数据都不能传输到网络场中的其他网络服务器,因此如果该站点需要扩展,那么您可能希望将 OTP 关闭网络服务器。当然,除非您使用粘性会话。
【讨论】:
Session 是客户端无法访问的服务器端集合(与 cookie / viewstate 不同)。它应该不受客户端操纵。
不过,我认为您应该将这些 OTP 存储在数据库中并与它们进行比较。
【讨论】: