PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008
程式的安全, 除了本身自己該注意的事項外, 還有不少偵測程式, 可以幫你避免掉意外狀況.
此文章加上年份的資料, 主要是因為安全性會隨著時間演變, 原本安全的程式也會變的不安全(ex: XSS), 所以本篇文章是 2008 年寫的, 或許到 2009 年就過時囉, 請把此篇當參考, 再去看最新的安全資訊會比較保險.(不過就算過時, 請還是不要把它遺漏掉, 過時的漏洞還是漏洞, 還是會有安全性的問題產生)
關於安全的資訊, 先講結論就是: 網路是危險的.
 大家能做到的就是盡可能的保護, 但是無法保證絕對的安全.(另外 安全
 和 方便
 通常是呈反比的)
這兩篇文章/簡報都蠻值得看看, 有助於瞭解下面為何要做那些事, 和其它的防範:
下述先就幾方面做整理:
 - PHP 程式撰寫上該注意到的事項
  - SQL Injection/XSS(Cross-site scripting attacks) 偵測程式(白箱/黑箱測試)
  - PHP 系統上的注意事項
 
- 相關文章整理
 
PHP 程式撰寫上該注意到的事項 
首先對於安全的認知, 就是 外部拉到的資料(使用者送出的資料), 都是不安全的, 都要做嚴謹的檢查.
哪些是外部拉到的資料(使用者送出的資料)?
 - GET: $_GET (Form submit/網址列參數)
  - POST: $_POST
  - REQUEST: $_REQUEST
  - COOKIE: $_COOKIE
  - JSON/AJAX/合作廠商送的資料/讀取檔案, 要將資料寫入 DB 的 Data 等.
 
有人常會說用 Framework 就可以避免掉這種事情, 個人認為這是不太正確的想法, 因為太依賴 Framework, 反而有可能造成安全上的漏洞.(註: 並不是指不要用 Framework, 而是用 Framework 還是要注意下述的安全問題)
ex: Framework 通常會幫你做好 SQL Injection 預防的處理, 但是於 XSS 的處理上, 這通常還是得要有自己的認知, 哪些地方能使用 HTML, 秀出來的 HTML 要做過哪些處理? 允許哪些 HTML Tag? 要怎麼過濾? 這些一般 Framework 並沒辦法幫你做決定, 處理上也沒那麼容易.
PHP 本身已經提供預防各類安全問題的處理方法, 下述就簡單列出來, 不過隨時代演進, 會跟著改變, 就看當下的狀況來處理囉~
PHP 設定檔(php.ini) 
 - 轉載 LAMP 攻防簡報裡的內容, 不過 magic_quotes_gpc 做個修改
  - register_global = off (全域變數)
  - magic_quotes_gpc = off (' => \' , " => \" , %00 => \ 0) (建議 magic_quotes_gpc = off 自己處理)
  - display_error = off (在網頁上顯示錯誤訊息)
  - log_error = on (紀錄錯誤訊息)
 
- allow_url_fopen = off (可開啟遠端網頁)
  - expose_php = off (顯示PHP 版本資訊)
  - open_basedir = (允許開啟的目錄)
  - safe_mode = on (安全模式)
  - disable_function = (禁止使用的函數)
  - safe_mode_include_dir = (允許include的目錄)
 
PHP 接收參數 GET/POST/REQUEST/COOKIE/SERVER/ENV. 
 PHP Filter Functions(要安裝 Pecl filter)
沒有使用此 Filter 也無所謂, 重點是要做嚴謹的檢查.(ex: integer, 年月日.. 等)
PHP 於 HTML 頁面的呈現(無法讓 User 使用 HTML 情況) 
PHP 於 HTML 頁面的呈現(讓 User 使用 HTML 情況) 
PHP 於 Shell script command(呼叫外部程式帶入參數, ex: system, exec) 
瀏覽器 URL列 GET 的參數傳送 
 
urlencode: 將要傳的參數值都要經過 urlencode, 這主要是符合標準 ( RFC 1738).
PHP Source code 加密(Encrypt), 某些商業用途採用 
SQL Injection/XSS(Cross-site scripting attacks) 偵測程式(白箱/黑箱測試) 
註: 這些工具請不要拿去玩其它網站, 只做自己程式/網站的掃描測試用.
程式本身需要加 mysql_escape_string/htmlspecialchars 等(上述挑其一方法做), 總會有不小心漏掉, 或者那是外來程式 等, 下述的工具可以來做簡單的檢測~ (我目前使用 Wapiti 和 Pixy, 其它就不太熟了.)
PHP 系統上的注意事項 
系統上該注意的, 就是本身系統要更新, 然後 PHP 部份, 就是把 Suhosin 裝起來.
安裝方法有下述兩種:
相關文章整理 
上述感覺不到危險的, 這幾篇文章可以自己試著測試自己寫的程式看看.(請不要拿來測試非自己的網站/程式)
下述就比較偏向其它相關文章整理
原文出處:PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008 - Tsung's Blog