這與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