2012-04-19 143 views
2

我是PHP開發新手。我沒有任何同事討論PHP。所以我會在這裏發佈我的問題。這個PHP腳本是否安全?

我已成功地爲我自己做的登錄腳本,女巫看起來很像本網站上的腳本:http://www.phpeasystep.com/phptu/6.html

我的問題是。這是一種安全的方法嗎?有沒有關於PHP登錄腳本的很好的教程?在會話中存儲信息的方法有什麼問題嗎?

回答

5

您發佈的教程中存在一些問題。

  1. 它看起來很老。的stripslashes?了session_register?這些都是以前版本的PHP構造,現在都被認爲是不好的做法。
  2. 即使作者說它是mysqlinjection安全的,但它不是,你也可以欺騙mysql_real_escape_string。使用PDOprepared statements作爲數據庫內容。
  3. 從代碼判斷,密碼似乎都是未加密存儲在數據庫中,這是不明智的!檢查Secure hash and salt for PHP passwords知道如何以安全的方式散列/存儲密碼。
  4. 可讀的密碼存儲在會話中,任何有權訪問您的cookie的人都可以從cookie中1對1地讀取您的密碼。壞!

如果您想要做的正確,請閱讀The definitive guide to form-based website authentication並實施它的建議。

+0

我同時加密和密碼。這裏沒有問題。 只是想知道「從數據庫中選擇 - >在會話中存儲」的方法。 PHP新手,不想讓門打開:) – hogni89 2012-04-19 08:28:29

2

它不是安全可言:

  • 你存儲的密碼數據庫加密。只存儲數據庫中的散列(sha256或更好:sha512)(帶鹽),然後查詢用戶名和密碼的密碼
  • 您正在cookie中存儲未加密的密碼。你根本不應該這樣做。您應該在數據庫中存儲會話標識,每次加載頁面時都可以檢查會話狀態。
  • 我不知道你是否使用它,但嘗試使用SSL加密(https)加密傳輸用戶憑證。
+2

SHA1不被認爲是安全的一個登記表,更喜歡sha256或sha512 – 2012-04-19 08:13:17

+0

是的。剛剛編輯:-) – Stefan 2012-04-19 08:14:11

0

看看這個腳本,我會說只要你實現了帶斜槓功能並使用哈希算法(SHA256)來存儲密碼,那麼你會走很長的路線。你可以通過向hash添加一個salt來進一步擴展它,如果有人曾經攻擊過你的數據庫並且執行了SELECT * FROM Password WHERE Password ='HASH',這將保護你。這將返回所有用戶名並允許攻擊者嘗試使用這些憑據登錄。 SQL Injections和XSS是網站上常見的攻擊類型,可以通過登錄系統執行。我會建議閱讀他們。

其他資源:

http://www.webstockbox.com/php/7-tutorials-on-how-to-create-a-php-login-system/

http://en.wikipedia.org/wiki/Cross-site_scripting

http://en.wikipedia.org/wiki/SQL_injection

0

號它更安全不存儲密碼原樣。你最好散列密碼(即使用md5())並將散列存儲在數據庫中。要進行登錄,您需要從表單發送密碼,對其進行散列並與存儲在數據庫中的散列進行比較。

+2

我會建議使用比md5更安全的東西。即SHA256 – 2012-04-19 08:25:05

2

絕對不安全,它將密碼存儲爲文本,無需散列。檢查密碼哈希(至少sha256,從不md5或sha1)和鹽漬 哈希將編碼密碼,以便在成功的數據庫攻擊的情況下沒有人能夠獲得密碼。 Salting會增加一些安全性,您只需在每個密碼中添加一些字符串並對其進行散列即可。您可以爲每個用戶和服務器salt使用一些不在鍵盤上的特殊字符。這將使密碼非常安全。 使用PDO和參數進行SQL查詢可以使其從SQL注入攻擊中更安全。
至於在會話中存儲 - 確定,但從不存儲密碼,密碼被插入,散列,並且再也不會使用,至少直到另一次登錄。

0

SHA512散列是鹽,如果可能最好的方式,但我發現這個負載和使用PDO,但我不能讓一個使用SHA512哈希任何想法回覆請

+0

如果你有問題,你應該啓動一個新的 – 2012-12-22 00:18:21