[英]Secure method for supporting partial string matching on an encrypted database field
我正在編寫一個使用PHP + MySQL的Web應用程序。 我知道PHP和MySQL都可以執行數據加密。 我還讀到,就安全性而言,在PHP級別加密數據更為可取。 但是現在我遇到了這個問題:我想加密某些用戶數據的地址字段。 但是在使用PHP編寫的網頁中,我想支持地址字段的部分字符串匹配。 我當前的解決方案是在MySQL級別加密數據,然后像這樣進行搜索:
// PHP code for inserting data into database
mysql_query("INSERT INTO test VALUES ('', AES_ENCRYPT('" . $addr . "', UNHEX('" . $hexstring . "')))", $link);
// PHP code for partial string matching
mysql_query("SELECT * FROM test WHERE AES_DECRYPT(address, UNHEX('" . $hexstring . "')) like '%Street%'", $link);
有沒有更安全的方式在PHP級別而不是MySQL級別執行加密? 我能想到的是檢索所有記錄,用PHP解密數據並執行匹配,但這會非常慢。 AES不是必須的,任何加密/解密方法都可以,只要它足夠安全即可。
我想加密一些用戶數據的地址字段。 但是在使用PHP編寫的網頁中,我想支持地址字段的部分字符串匹配。
這是加密數據庫的困難。 您必須在以下兩者之一中進行選擇:
如果您願意使用后一種方法(我願意),則該過程有些簡單:
123 Main Street
=> 123m
等) hash_hmac()
或hash_pbkdf2()
。 當然,如果您的加密密鑰與數據庫服務器存儲在同一硬件上,那么所有這些都是徒勞的。 能夠訪問數據庫(例如SQL注入)的攻擊者可以逃逸到文件系統並竊取密鑰,除非Web服務器和數據庫位於單獨的硬件上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.