2017-04-06 138 views
1

我被要求對如何對錶單提交數據進行加密並確保其安全地存儲在數據庫中進行一些研究。表格提交將包含有關員工的個人信息,這些信息必須保持安全。使用AES_ENCRYPT的最佳做法是什麼?它有多安全?

在我的研究中,我遇到了AES_ENCRYPT(),並設法應用此函數,以便它將數據成功存儲在數據庫中。

SQL語句的例子我用:

"INSERT INTO employee (firstname) VALUES (AES_ENCRYPT('$name', '$encryption_key'))" 

不過,我在這方面有非常有限的知識,我不知道這是足夠足夠的保護,以防止被黑客攻擊的數據。這提供了什麼級別的安全性?有什麼我錯過了或者我可以用來改進我的實現的另一種技術?

此外,我已將加密密鑰存儲在單獨的PHP文件中,但我不知道推薦的存儲方式是什麼。任何意見,將不勝感激。

對不起,如果這個問題是模糊或相當廣泛。我在這方面是一個完整的初學者。如果需要,我很樂意提供更多信息。

+2

如果你對[SQL注入]敏感,加密是非常不相關的(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)。你應該使用[prepared statements](http://php.net/manual/en/pdo.prepared-statements.php)建立你的查詢。 –

+0

我簡化了我的陳述以減少問題中的代碼量,但使用了: $ stmt = $ conn-> prepare(「INSERT INTO employee(firstname)VALUES(AES_ENCRYPT(?,'$ encryption_key'))」) ; $ stmt-> bind_param(「s」,$ name); – Jade

+0

好的,認爲可能是這種情況。 –

回答

0

AES (Rijndael) crypto是非常安全的。在實踐中,除非您的數據具有極高的價值,否則您可以認爲它是安全的。除非一些擁有大量資源的演員決定要破解你的加密,否則沒有人會這樣做。

但是它是對稱的。它使用相同的密鑰來加密和解密內容。所以,你可以認爲它和你的密鑰一樣安全。

你的鑰匙不安全。如果一個cybercreep破解運行你的php代碼的服務器,他們立即可以訪問你的密鑰。這使他們能夠訪問您的加密數據。他們有一個明亮的霓虹燈路標,上面寫着「這裏是我認爲很敏感的數據」。

不要忘記,安全取決於薄弱環節。通常認爲使用您的金錢和時間來保護您的服務器更爲智能,而不是在dbms的幾列上使用對稱加密。換句話說,就你而言,你可能在浪費你的時間來完成這種基於列的加密。

如果您絕對必須對靜態數據進行加密,則應考慮使用非對稱(公鑰/私鑰)加密系統。使用公鑰對東西進行加密,並將私鑰保存在具有空氣隙的安全系統中,以防需要解密某些數據。

你的例子(名字)不夠敏感,不值得冒這個麻煩。

+0

謝謝你的建議。 你知道我在哪裏可以找到有助於我學習如何使用非對稱(公鑰/私鑰)密碼系統的信息嗎?或者你能否提供更詳細的解釋呢? – Jade

+0

@Jade非對稱系統在多關係中最爲有用,即如果您有多個發件人對數據進行加密,但只有一個接收者將其解密。在你的場景中,你可以發送一個公鑰給客戶端,讓他們在將數據發回給你之前對它們進行加密,然後你可以用你的服務器端私鑰對它進行解密。但那會浪費時間,因爲這在功能上只是HTTPS。如果你保證你的密鑰安全,這比聽起來要困難得多,那麼這種對稱的方案是好的,如果有爭議的效用。 –

+0

「AES(Rijndael)加密非常安全」:如果您以正確的操作模式(CBC,CTR,GCM等)使用它,100%同意。但是這個代碼沒有IV,所以我有一個有趣的感覺,她在不安全的ECB模式下使用它。至於非對稱加密,只有在不需要解密同一系統上的數據時纔有所幫助。如果她確實需要在同一個系統上解密,那麼最好堅持使用AES。 – TheGreatContini

相關問題