这与another question I asked相关。总之,我有一个URL的特例,当一个表单发布给它时,我不能依靠Cookie来进行身份验证或维护用户的会话,但我需要知道他们是谁,而且我需要知道他们已经登录!如何防止重播攻击?
我想我想出了一个解决我的问题,但它需要充实。这就是我的想法。我创建了一个名为“username”的隐藏表单域,并在其中放置用户的用户名,加密。然后,当表单POST时,即使我没有收到来自浏览器的任何cookies,我知道他们已经登录,因为我可以解密隐藏的表单字段并获取用户名。
我能看到的主要安全漏洞是重播攻击。如何阻止某人获取该加密字符串,并以该用户的身份进行发布?我知道我可以使用SSL来窃取该字符串,也许我可以定期旋转加密密钥,以限制字符串适合的时间长度,但我真的很想找到防弹解。任何人有任何想法? ASP.Net ViewState是否阻止重放?如果是这样,他们是如何做到的?
编辑:我希望有一个解决方案,不需要存储在数据库中的任何东西。应用程序状态是可以的,除非它不能在IIS重新启动或在Web场或花园场景中工作。现在我接受克里斯的回答,因为我不相信甚至可以在没有数据库的情况下保证这一点。但如果有人想出一个不涉及数据库的答案,我会接受它!
我问这个问题后,我实际上决定做这件事。伟大的思想家都认为一样:) – 2008-09-21 02:55:54
请注意,如果时间戳/ cookie未加密或者在用户代理层可以进行欺骗,那么这对黑客只会操纵时间戳值无效。 – 2014-07-21 18:37:04