免責聲明:通過思考擊中-1按鈕之前「!不要儲存用戶的憑據,鹽+胡椒粉你這個白癡哈希他們」,閱讀以下內容:安全的方式
我正在研究要向用戶詢問其數據庫的憑據(登錄名/密碼)的項目。這些憑據將針對數據庫進行嘗試,如果連接成功,我將按照用戶的要求在數據庫上執行一些操作(創建表,更改行,執行SELECT等等),以使它們「保持」。 )。
這意味着,每次用戶都會做某些事情時,我會在做出他的請求前重新連接到數據庫=>我不能散列憑證,因爲它們對於後續請求沒有用處。
這就像PhpMyAdmin如果你喜歡。
所以我想出了各種可能性,但他們每個人都有缺陷。我在尋找你的幫助,知道哪一個會更好。
- 只需使用帶登錄名/密碼的會話cookie清除。但只允許通過HTTPS使用:這是最簡單的實現方式。我看到的唯一缺點是,如果客戶端有XSS,則可以檢索憑據。
- 相同的會話cookie,但使用AES加密的登錄名/密碼。這就是我相信PhpMyAdmin使用它的原因。我可以進一步只允許HTTPS。
- 將憑證明確存儲在本地會話存儲(session.db in sqlite)中,並使用令牌作爲將使用給定令牌+瀏覽器詳細信息檢索的客戶端。缺點:如果攻擊者訪問session.db文件,他將能夠讀取尚未從文件中刪除的會話。我不認爲對它們進行加密會很有用,因爲如果他可以訪問session.db,他當然也可以訪問用於加密它們的SECRET_KEY。
您怎麼看?你會怎麼做?
感謝您的幫助。
好啊,這將意味着關鍵的基礎是辣椒,鹽的象徵。此外,這意味着如果攻擊者訪問session.db和密鑰庫,他還需要令牌來解密證書:IMPOSSIBRU:D –
對不起,不是不可能的:令牌必須在session.db中查找相應的記錄!即使你也用關鍵基礎來加強它,如果攻擊者獲得了關鍵基礎,那就是遊戲結束了。 **如果攻擊者可以破解你的應用,他通常可以獲取所有數據,你的應用可以看到**。這很可悲,但仍然是事實。 –
是的,你是對的。但是,仍然比發送每個請求的憑證要好。我要去這個!謝謝 :) –