2012-02-26 70 views
0

我最近開始編寫另一個網站,這是5年來的第一個網站。在我非常熟悉使用PHP/Javascript編寫網站及其佈局之前,我很少使用它用於用戶帳戶(如果有的話,我有一個朋友編碼它),我只用它來存儲用於佈局目的的產品數據。如何使用PHP來安全調用MySQL數據庫?

目前,在購買證書之前,我不會使用SSL。

因此,現在我將使用PHP來保存名稱,電子郵件,地址,電話號碼等全部存儲在數據庫中。我瀏覽了數百個文檔,發現沒有什麼比較容易理解,因爲我幾乎不記得任何東西,只是簡單的編碼。

我的確發現了一些關於進行SQL注入等的一步一步的教程,但它們可以追溯到2005年。我正在尋找更近的東西。

理想情況下,所有我正在尋找的是一個很好的地方開始(沒有開始一個初學者的PHP)使用MySQL時使用PHP安全的網站。例如,密碼加密等等;隨着呼叫和注入數據庫。

在此先感謝。

編輯

謝謝你們,我一直忙於工作,我在等待一個答案,這將足夠了。我沒有達到我所要求的;可能是我的錯,但是。我查看了適當的文檔,但總是隻是拋出操作符和像javascript一樣的小功能。我已經過去了,我想要獨特的功能,有目的,我不知道在哪裏得到這些。他們似乎對我來說太複雜,或者太簡單。

我曾考慮過使用openSSL,但如果我記得我需要安裝它,這不會發生在我的客戶支付的廉價託管服務上。我告訴我的客戶,我只是熟悉這種東西,而且最好去除設計之外的其他地方,他不在乎它花了多長時間。所以現在我必須快速學習這一切。

+0

我建議你問一問[webmasters.se]。 SO更適用於涉及實際代碼的編程問題。請閱讀[常見問題]和[問]以獲取更多信息。 – 2012-02-26 23:46:49

+0

@Jim:我認爲這樣會更合適,因爲答案*會涉及代碼。 – icktoofay 2012-02-26 23:47:36

+0

@icktoofay我想我可以看到它,這是我沒有downvote或closevote。 – 2012-02-26 23:51:09

回答

2
  1. 安全的後端連接
    如果要保護從Web服務器到數據庫服務器的連接,你可以使用openssl生成一個SSL證書,並在this article
  2. 建立安全連接與 MYSQL_CLIENT_SSL flag in mysql_connect()
  3. 清理輸入
    爲了防止SQL注入,確保您在查詢中使用的輸入,實際上是你所期望的輸入,無論是通過input validation based on input types,或逃避元字符,像mysql_real_escape_string()
  4. 密碼散列
    像單向散列一樣簡單(例如使用SHA-1)可以幫助您以更安全的方式存儲用戶密碼。存儲密碼哈希值,然後將存儲的哈希值與認證期間輸入的密碼的哈希值進行比較。
+1

關於'mysql_real_escape_string()'。從長遠來看,最簡單的解決方案(至少對我來說)是使用PDO或類似的方法來創建準備好的語句,而不是依賴於轉義方法。任何體面的圖書館都應該自行處理這部分內容,並且如果需要的話,您不必記住手動轉義和添加引號。 – Optimist 2012-02-27 00:36:18

2

準備好的語句將幾乎完全保護您免受SQL注入。

但是我發現他們在後端實現時很痛苦,當你真正需要做的就是通過mysql_real_escape_string輸入輸入,並確保它在查詢中用引號括起來,這樣黑客就不能打破了字符串。

+0

[PDO](http://www.php.net/ref.pdo)似乎並沒有太多的痛苦。 – icktoofay 2012-02-26 23:48:53

+0

或MySQLi,它也使用準備好的語句 – SynerCoder 2012-02-26 23:52:41

+0

@Kolink我曾經這麼認爲,但是一旦我習慣了準備好的語句,我認爲它們更容易處理。轉義變量混淆了代碼,您必須小心,以便您記住每個人。另一個缺點是,如果你必須在函數中使用它們,它會「毀掉」這些變量,所以你最終會得到一個特殊的轉義副本來保持它們的獨立性。 '$ statement-> execute($ query,array($ name,$ user,$ email))'是一個很好的緊湊的方法。 – Optimist 2012-02-27 00:42:24