這個問題有更多的關於我如何設置我的服務器端代碼爲一個簡單的登錄腳本。我對實現我的目標的最佳方式感興趣,當然這是爲了針對數據庫驗證用戶用戶名和密碼,並向他們提供成功的登錄名,註冊頁面或找到的用戶名或密碼,但替代方案是錯的。登錄服務器端邏輯
現在,我把它建立在我的sql查詢掃描數據庫的用戶和傳遞:
SELECT * FROM test WHERE userName='" + userName + "' AND pass='" + password + "'"
問題的這種做法,要麼返回一個true或false ......我不能告訴其中一個輸入是否正確,另一個不正確。它要麼找到記錄,要麼沒有。
因此,我可以基於用戶名進行查詢,如果發現,請在將用戶傳遞給成功登錄之前檢查記錄是否有正確的密碼。這樣我知道密碼是否是錯誤的,但我不知道密碼是否正確,用戶只是輸入錯誤的用戶名。
另外,我可以擴展,如果沒有找到用戶,請根據密碼重新查詢數據庫,並確定是否可以找到記錄但用戶名不匹配。這似乎與數據庫來回很多,這很好。但我想聽取一些專家的意見,看這是否是一種正確的方法。
我沒有看到單獨的查詢密碼的地步。不應該阻止多個用戶選擇相同的密碼。從安全的角度來看,您永遠不會希望向用戶反饋說「該密碼已被使用」。 –
在處理登錄失敗時提供太多信息通常被認爲是不好的做法 - 它爲黑客提供了可用來滲透系統的信息。 查看hotmail或google郵件上的用戶流量,瞭解目前可接受的方式。告訴黑客,他們得到了正確的用戶名,但錯誤的密碼告訴他們繼續嘗試不同的密碼;告訴他們他們有一個有效的密碼,但沒有正確的用戶名允許他們測試普通密碼(神,性別和密碼,根據民間傳說)的存在..) –
有道理。這是我正在尋找的反饋。謝謝。根據您的反饋意見,我目前正在採取這種方式,採用適當的方法? – ryandlf