基本上系統能做的防護,應該該做的也差不多了。
例如,
- 該主機僅限特定區域的電腦才能存取;區網的部份有切開,防火牆有做好相關設定
- 系統介面有做特定的 IP檢查
- 系統介面有做帳號的登入檢查機制
- 系統有做 injection 的相關防護
- 連線走 SSL 的加密連線措施
- 定期修補作業系統、MySQL、 PHP
在資料的儲存方面還可以再加強。將敏感性的文字加以處理,經加密後再放在資料庫內會更加安全些。
研究了一下,MySQL Encryption and Compression Functions。使用 AES_DECRYPT() 與 AES_ENCRYPT() ,可以將要放的文字經自行定義後的 KEY值,經 AES演算法處理後再放在資料庫儲放,當然取出的方式也是要經 AES_DECRYPT() 處理後,才能完整呈現加密前的文字。只要是沒有取到程式內所記錄的 Key 值,直接觀看記錄的結果,它會是一連串的亂碼。
使用的方式很簡單,範例如下:
(1) 修改資料型態:
use a column with a VARBINARY or BLOB binary string data type
(2) 加密的方式:
INSERT INTO `table` (
`name` ,
`phone` ,
`address`
)
VALUES (
'TEST', '035742995', AES_ENCRYPT('要儲放聯絡地址文字','Your Key')
);
(3) 取出的方式:
SELECT *, AES_DECRYPT(address , 'Your Key') Decode_address FROM `table` WHERE `name` = 'TEST';