2013-05-18 57 views
0

我正在爲我的大學開發一個項目。如何讓我的PHP項目更安全?

該項目已獲得我大學的批准,並將於下週在5000名以上的學生中進行現場直播,該項目運行良好,但我擔心學生可以進行黑客入侵。

該項目是一個通知發佈門戶網站和技能推動項目,大學管理將發佈新聞,學生可以在電子郵件驗證後查看。學生可以上傳他們的成就與大學分享,可以分享他們的創意作品,如應用程序,網絡服務等。他們還可以瀏覽其他填寫個人資料的學生的技能,這將有助於製作團隊。

我已經申請證券下面:

  • 我用if(isset($_SESSION['name']) && isset($_SESSION['email']) && isset($_SESSION['pass']))每一頁上,以防止未的loggedIn 用戶。

  • mysql_real_escape_string($pass); //用於轉義特殊字符。

  • 密碼使用salt方法加密(Crypt();)。

  • 註冊過程中的驗證&文件上傳限制。

我已經搜索並應用了上述證券,但想知道在這種類型的項目中還需要其他什麼東西,或許在.htaccess中添加一些內容?

+0

我覺得有沒有剩餘的這一級項目全部....最好的,希望你的項目做得好 – Gautam3164

+2

加密每一個用salt值爲你的所有權利操作,如添加,編輯,刪除,視圖和隱藏的,但可以在控制檯和數據庫主鍵中看到的ajax調用ID)很容易被看到。 –

+0

@ Gautam3164:我已在此顯示,以便您可以查看門戶網站。任何建議或想法的項目? – user2216267

回答

2

在有沒有很好的理由來存儲密碼(或哈希密碼,如果這就是你在做什麼)會議。密碼是祕密。你應該非常小心你如何處理別人的祕密。

存儲唯一的名稱(或電子郵件),足以確定該用戶是否登錄

我發現一些其他問題:在上面的登錄表單

  • 密碼字段不爲「密碼「類型。允許肩上衝浪。
  • 如果您已經對密碼進行了散列處理,則不需要使用mysql_real_escape_string()。散列密碼應該是您收到密碼後的第一件事。
  • 在帳戶頁面上,您已使用「密碼」類型字段作爲安全應答,但您已預填充該字段的值。這在HTML源代碼中可用。你的是12345
  • 您的php.ini中仍然有display_errors設置爲true。
  • 沒有SSL。所有的密碼將在學院網絡上以未加密方式發送。
  • 你的問題沒有提到bcrypt但它應該。 BCrypt是一個合適的密碼哈希算法。 (PHP稱這個CRYPT_BLOWFISH)。
  • 使用mysql_real_escape_string()表示您未使用預準備語句和綁定參數。這樣做使SQL注入變得不可能。切換到mysqli或PDO。

我沒有嘗試任何不尋常的POST請求到您的服務,但我注意到你有一堆字段在HTML中禁用了編輯。這實際上並不妨礙任何事情。我可以使用不同的學生ID提交該表單。接收的PHP是否處理這種情況?

+0

感謝您的有用反饋:) ....頂部登錄表單上的密碼字段更改爲使用JavaScript進行單擊時輸入密碼....是的,我已經在PHP端處理它,因爲我沒有通過禁用的字段SQL更新查詢....你是如何將它變成php.ini文件的?對該項目有更多的建議嗎? – user2216267

+0

我使用NoScript來處理JavaScript,但我知道這是一個不尋常的選擇。我沒有看到你的php.ini。我看到瀏覽器中顯示數據庫連接錯誤。 :-) – Ladadadada

+0

okk :)謝謝:))是數據庫連接錯誤的任何破解?我應該做更多的改變? – user2216267

1

嘗試進行加密和能解密您的網址參數這一

$salt ='The key you can use anything'; 

加密:

function simple_encrypt($text) 
{ 
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); 
} 

能解密:

function simple_decrypt($text) 
{ 
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
} 

這裏$文字是你的平價要通過URL

ameters希望這將有助於你

+0

謝謝....所以我應該使用加密之前echo「」;它呢?並在接收時解密它?(主要是爲了不暴露我的主鍵)? – user2216267

+0

當您給出編輯或刪除記錄的鏈接時,您將重定向到另一個頁面..此時將加密的ID和參數傳遞給該頁面,並解密獲取值,然後執行此操作。通過這你可以保護參數,你可以做同樣的動作,你通過原來的價值;-) – Gautam3164

3

一些小的改進,可以作出:

1)您只需要存儲在你會把用戶一個會話id後他們登錄。

2)不要再使用mysql了。使用PDO其驅動程序,使您可以使用參數化查詢來防止SQL注入。

3)安全存儲密碼使用bcrypt這裏是如何使用它的一個很好的答案:Link

+0

謝謝:))我使用3會話值,因爲我認爲有人使用一些會話工具(可能)值可以被設置?有沒有這樣的工具?並且crypt功能不太安全? – user2216267

2

搞砸了最簡單的方法是通過SQL注入(假設你正在使用的數據庫) - 甚至還有機器人在那裏試圖插入代碼到您的網頁,雖然SQL注入,並提供惡意軟件

我將確保每個SQL語句(無論是INSERT/SELECT/UPDATE/DELETE),只要有用戶輸入參數即可。對於你已經處理好的字符串(但是對於字符集警告請閱讀http://php.net/manual/en/function.mysql-real-escape-string.php),對於整數,我會使用(int)輸入。

只要確保你有頻繁的數據庫備份,那麼你可以面對任何有創意的學生。

,想想你顯示用戶輸入,人們可以提交HTML代碼與<scripts>的方式,更好地拉平他們與用htmlspecialchars()

+0

謝謝你,這很有幫助:))....確定沒有安全的每一條SQL語句:)....對項目有更多的建議嗎? – user2216267

+0

不客氣!我想其他人已經提出了很好的觀點:)所以我現在可以提出的所有建議。 –