2010-02-08 68 views
5

我已經做了一些網絡編程(使用PHP和MySQL),但沒有太大的規模。我一直在想如何有人創建一個社交網絡類型的網站,我遇到了一些問題。對Web開發有一些疑問(PHP和MySQL)

  • 您如何安全地將密碼安全地存儲在MySQL中?你會使用什麼樣的加密?
  • 如果允許用戶上傳圖片,將它們存儲在數據庫中還是直接上傳到服務器會更好?
  • 什麼開放源碼的網絡應用程序(如WordPress),你會推薦我閱讀和研究(最好是簡單但寫得很好)?

任何課堂教學或書中書寫的東西似乎都不能很好地轉化爲真實的生產代碼。他們只是非常基本的例子。

謝謝!

回答

0

對於密碼存儲,我建議使用MD5加鹽。 MD5是不可能解密的,但它可能使用彩虹表進行破解。例如:Here is a MD5 lookup site I've coded

我會親自將它們直接上傳到服務器,但是,您需要確保只有有效的圖像文件可以上傳。不希望有人上傳一個rootshell。

+1

MD5現在實際上被認爲是壞的。根本不要使用它。 – 2010-02-08 20:53:20

+2

真的嗎?打破它:fb922e006b2bde97591200f956bb9e33 – Rob 2010-02-08 21:23:59

2
  1. 存儲鹽漬散列。我會親自離開md5並使用類似sha的東西來代替。 sha1 + salt會持續一段時間=]

  2. 如果你把圖像作爲斑點存儲在數據庫中,你將來可能會有更容易的時間備份它們(沿着數據庫,抓取它們等)。但是,真的,他們在文件系統上的速度也會很快,但是我更喜歡數據庫中的他們,因爲我有很多與db相關的代碼,我很喜歡在這個領域工作。這取決於你。

  3. 我不確定那個wordpress會幫助你建立一個社交網站......但它仍然很好地閱讀其他的代碼。我會看看有關亞馬遜在架構上的一些書籍,只是爲了讓您的思維大規模思考。另外,看看一些設計模式書。

我也想看看Zend Framework或CakePHP。 Cake可能會讓你運行起來相當快,但我更喜歡Zend,因爲它非常強大,並且不會強迫你編寫某種風格。 CakePHP有點像PHP的rails。

你也想在安全體面的,服務器和客戶端,看着像會話劫持,SQL注入,XSS,蠻力嘗試,遠程包括上傳文件漏洞等

東西社交網站爲餅乾提供了許多攻擊媒介。

資源:

+4

不同意在數據庫中的圖像。如果有許多用戶上傳圖片,數據庫將立刻變得臃腫,並且數據庫備份也會讓所有圖片都感到痛苦 – AntonioCS 2010-02-08 21:12:18

+0

這很公平 - 但這就是爲什麼您有表格 - 您甚至可以爲這些項目提供單獨的數據庫,一些例程將像Memcache中的圖片/頭像等東西貼在一起,以實現快速訪問。 我不確定我認爲在文件系統中有圖像是一個更好的主意。 – 2010-02-08 21:47:23

+0

對於一個小型系統,將圖像存儲在數據庫中很好。當你的數據集增長到幾GB時,你不會喜歡你以前的設計決策。這個討論已經完成,不要一再重複同樣的錯誤。 – Jacco 2010-02-08 22:53:37

1

對於圖像存儲,我總是習慣將它們存儲在硬盤上,但使用一個非常困難的圖像驗證腳本,以確保圖像不包含惡意代碼。 我也習慣應用URL重寫,因此用戶無法找到圖像的真實路徑。

難道你沒有奇怪的感覺將圖像存儲到數據庫中嗎? MySQL數據庫的增長速度非常快,您將始終需要一個PHP腳本來顯示圖像,這意味着它會讓您的服務器變得更慢。


至於密碼存儲,使用salting作爲其他人回答。


最後,對於文檔,我非常喜歡看看Wordpress的結構。 我花了好幾個小時看着它的源代碼並閱讀它的文檔。這只是如何組織任何網站的一個非常好的例子。

1
  1. 將散列函數應用於密碼(如sha1或md5)。然後像md5的前5個字符(「社交」)或其他東西一樣添加額外的「鹽」。這取決於你,但這是爲了讓黑客獲得訪問數據庫的權限,他/她將無法通過彩虹表運行你的散列密碼並獲得實際的密碼。
  2. 我正在運行一個網站,允許用戶上傳圖片。圖片以垃圾箱(即每個垃圾箱1,000張圖片)組織(僅限於每個文件夾中只有很多文件纔會遇到問題)。圖片的位置存儲在數據庫以及其他信息(如圖片ID,文件擴展名,bin位置等)。數據庫中的另一張表將圖片ID鏈接到用戶。此外,該圖片的文件名,一旦其上傳的是一樣的東西

    {bin}/{userId}_{pictureId}_{token}_{variant}.{fileExt}

  3. 不知道有關的Web應用程序,但你絕對應該使用一些內置的PHP類,如PDO數據庫抽象層。

+0

MD5和SHA1現在不再被認爲是安全的。使用SHA256或更好,但BCRYPT – Jacco 2010-02-08 21:07:38

+0

我不認爲這應該重要,因爲你是salting密碼?它不會是純粹的MD5或SHA1哈希 – axsuul 2010-02-08 22:06:12

0

問題3:我會建議學習一種現代Rails風格的框架(我最喜歡的是Symfony),而不是像Wordpress或Gallery這樣的應用程序。他們都很出色,但他們已經從簡單的黑客進化而來,並不一定是我從頭開始的任何事情的開始。

另外,對於問題2,我討厭數據庫中的二進制blob。文件系統對此非常有用。

問題1:單向散列,正如其他人所說的那樣。 Mysql的密碼()函數可能沒問題。

0

所有這些問題都已經回答過。

你會如何安全地將密碼安全地存儲在MySQL中?你會使用什麼樣的加密?

https://stackoverflow.com/search?q=password+hash+database+php

如果用戶被允許上傳圖片,會是更好的將它們存儲在數據庫或讓他們直接上傳到服務器?

https://stackoverflow.com/search?q=store+images+database+php

你會推薦什麼開源Web應用程序(如WordPress)我看書學習(最好是簡單的東西,但寫得很好)?

https://stackoverflow.com/search?q=social+network+php

你也應該考慮到,運行和管理社交網站不僅僅是編碼更多。你確定你想從頭開始創建一個嗎?考慮一下,如果你對Ning這樣的事情感到同樣高興,那麼每個人都可以在沒有任何編程的情況下創建自己的社區?