2014-07-11 94 views
0

我正在爲小公司使用客戶端身份驗證並可能使用https爲RESTful服務創建Web服務。我在問一個非常簡單的問題,我希望這個問題不是太寬泛,但我對互聯網安全非常新穎和天真。我必須採取哪些預防措施來確保我的數據安全?使用本地MySQL數據庫保護Web服務器

來形容我的服務了一下,網友們在那裏他們將可能不敏感的信息,並使用自制的認證令牌我上成功登錄創建一個鹽醃密碼從數據庫中檢索它的帳戶。我使用的是一個亞馬遜實例,其中MySQL是本地的,並且遠程授予我訪問權限,因此我可以直接從我的家中訪問它。我使用幾個PHP腳本來完成我的工作請求和添加數據,並試圖防止注入。我正在將我的MySQL憑據存儲在一個與PHP腳本不同的文件中。我只能用我認爲安全的pem文件進入我的服務器。

我最大的擔心是,有人會來刪除我的數據。我必須採取哪些其他預防措施?由於

+0

你不應該讓你的mysql守護進程從公共因特網上可用,沒有防火牆來阻止你自己旁邊的所有請求(允許你的ip,如果需要的話,禁止所有其他請求) – Rufinus

+1

確保你沒有任何'username @%'授予你的MySQL權限。只允許'username @ localhost'和'username @ yourIP'。 – Barmar

+0

[保護包含MySQL數據庫的簡單Linux服務器的可能的重複?](http://stackoverflow.com/questions/41641319/securing-a-simple-linux-server-that-holds-a-mysql-database) –

回答

1

如果您使用的Amazon EC2,那麼你應該充分利用自己的安全組來鎖定你的MySQL服務器,並確保它沒有外部訪問是可能的。

應用程序服務器具有內部非路由10.x類型的IP,應該用於訪問控制,並且如果VPN訪問或SSH隧道不切實際,則應將任何外部IP(如家庭網絡)專門列入白名單這兩個要容易得多。

絕對確保沒有憑據,配置文件或密鑰存儲在您的Web根目錄中的任何位置。也就是說,如果您不小心以最差的方式錯誤地配置應用程序服務器,打開目錄索引以及所有內容,就不可能攔截任何關鍵的東西。

您可能還需要明確排除的*.inc下載的情況下,你犯了一個錯誤。這裏的想法是設置一些保護措施,在事情發生嚴重錯誤之前,您必須先解決這些問題。一個錯誤的失敗情況總是不良計劃的結果。

高於一切,是非常警惕proper SQL escaping避免SQL injection bugs因爲沒有你的MySQL服務器的防火牆安全量會幫助你當有人可以通過代碼中的錯誤在服務器上駕駛一輛卡車,並提供免費的統治。建議您在開始使用之前仔細審覈您編寫的任何SQL接口代碼。

確保有一個使用版本控制系統的正確的部署過程。如果你曾經有過入侵,那麼如果你有一個入侵,就很容易回滾到已知好的版本。上世紀九十年代的風格「在FTP服務器上拋出文件」的部署方法在最佳時機危險,並在出現問題時對您的業務造成嚴重損失。使用版本控制,或者你靠借用的時間生活。

+0

感謝您的建議?當你說不要在我的web根目錄中存儲憑據時,我應該在哪裏存儲它們,以便我可以將它們包含在php中?對於注入,我爲所有的GET或POST變量使用intval()或mysqli_real_escape_string(),這足夠嗎?再次感謝 – shane

+0

將你的憑證儲存在那以外,所以如果你有'mysite/public',那麼你會使用'mysite/includes'作爲例子。另外,避免使用'intval',這不是一個通用的解決方案。參數化查詢和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)是將用戶數據添加到查詢中而不會產生安全問題的最佳方式。 – tadman

+0

因此,1)使用安全組來限制除我以外的所有人訪問我的服務器,2)將數據庫憑據存儲在Web根目錄之外,3)使用正確的SQL轉義,4)使用版本控制系統,最不好。這可能不是一個壞主意,擺脫'用戶'@'%'mysql用戶要麼 – shane