2014-05-12 152 views
9

我在尋找如何通過Ajax發送用戶名和密碼安全PHP,以及如何也存儲在MySQL數據庫中的值正確了。阿賈克斯PHP登錄腳本安全

在過去,我已經使用了以下類型的例子:

var formData = {username:$('#username').val(), password:$('#password').val()}; 
//SEND 
$.ajax({ 
    type: "POST", 
    url: "/signin.php", 
    data: formData, 
    success: function(data) { 
     //success 
    } 
}); 

這是通過JavaScript發送值,然後獲得從PHP返回OKFAIL。但是這足夠安全嗎?我希望有人會好心地指出我的權利,並從JavaScript發送敏感數據到PHP的安全方向。

SQLfiddle

+0

我也想知道這 –

+6

這是正確和標準的方式,如果你想保護用戶名和密碼,而發送到服務器意味着你想要網絡級別的安全性,爲此使用HTTPS,確保你的數據將是加密 –

+1

如果您沒有SSL,則可以對用戶名和密碼使用JavaScript公鑰加密,並且只能在服務器上使用私鑰並使用PHP進行解密。 – DanFromGermany

回答

6

是安全的,你需要確保以最小的三件事情:

  1. 輸入框中,鍵入=密碼 在用戶輸入密碼的用戶控件是一個密碼輸入型或自定義控制爲此目的設計已經充分的驗證不緩存等
  2. 連接,HTTPS 在當前狀態下,你的問題沒有提及連接是否是通過HTTPS。如果登錄框本身通過安全連接顯示,則更安全。另外,ajax需要通過安全連接進行發佈。
  3. 哈希密碼正確 使用本機PHP的密碼哈希API和哈希密碼和散列存儲在數據庫中。使用password_verify函數驗證輸入密碼。 password_hash() password_verify()

做「正確的」,你還應該考慮:

  1. 控制失敗的登錄請求的速度和數量。
  2. 記錄登錄統計信息,以便您可以識別奇怪的行爲並進行調查
  3. 使用瀏覽器端和服務器端密碼強度測試來驗證用戶的新密碼足夠強大。
  4. 使用captcha防止行人自動化
  5. 創建一個數據庫用戶,特別是用於身份驗證。相應地限制表/模式訪問。使用單獨的子域進行身份驗證。使用fastcgi-php或suphp將用戶設置爲auth訪問數據庫。允許正常的PHP數據庫用戶只能讀取該信號量或其他登錄狀態證書「沙箱」。

  6. 當用戶輸入密碼時,請使用站點驗證,ssl和他們在創建帳戶時設置的驗證「短語」或圖片,以確保他們輸入到服務器。

此外,大多數安全問題都將涉及您在登錄後執行的操作。你打算如何維護用戶的會話?更高的安全性通常需要降低用戶的便利性。您需要仔細考慮用戶一旦通過身份驗證即可訪問哪些類型的功能和信息。您的安全計劃應該考慮到這一點。

你可以考慮另一種方法是使用了OAuth2提供商如谷歌和Facebook。

+0

值得注意的是,僅僅登錄頁面是https是不夠的,*整個站點*必須僅僅是「https」。 –

+0

並且:**使用爲此製作的腳本!**當有幾種免費的優秀解決方案時,請勿嘗試自行構建。這將節省你很多時間,壓力和金錢! – Sliq

+0

@madarauchiha我完全同意。事實上,我最近不得不爲那些不理解在不安全的頁面上使用jQuery模式的jsonp不是一個可靠的解決方案的客戶處理這個問題。由於*堅持模式設計,因此實施了iframe解決方案以包含https加載的登錄微頁面。最好的辦法就是登陸一個安全的登錄頁面,這樣用戶就可以看到他正在通過安全鏈接進行通信。唉,只是一個僱用的槍。 –