這禮拜把 PHP Security Guide ( phpsec.org/projects/ ) 看完了,還蠻不錯的一份文件。
最基本步驟 1.考量壞心的使用者 2.要自我教育安全知識 3.過濾所有來自外部的資料。以下小記幾個重點:
1.Register Globals 造成的影響,建議開發時打開 E_ALL,初始所有變數。
2.介紹XSS攻擊。一定要過濾資料,並使用現成的PHP function來處理( htmlentities(),strip_tags(), utf8_decode() 等),使用白名單而不用黑名單過濾。建議使用 naming convention 來幫忙區分資料,如 $clean 表示所有處理好的資料。
3.介紹CSRF攻擊。建議使用 post 方法而少用 get。使用 $_POSt 而非 $_REQUEST。接收表單時檢查來自正確的表單頁面(使用token技巧)
4.建議讓一些 library file 放在網站外,或是設定apache 讓 library 目錄不可讀取。而 database access 帳號密碼則建議用 root 另存文字檔,然後在 httpd.conf 中去讀取(還是要小心phpinfo會洩漏)。
5.介紹SQL Injection,用 mysql_escape_string() 來處理,不要用 addslashed() 。
6.介紹 Session Fixation ,建議在重要時刻(更改使用者權限的時候)隨時使用 session_regenerate_id() 換 SESSION ID。
7.預防 Session Hijacking ,使用能consistent的資料(如 HTTP_USER_AGENT)來確定使用者是同一人。
8.介紹Shared Hosts的危險。建議 session data可以放到資料庫而不要放 /tmp。使用 safe_mode來限制 PHP。