這陣子抓 bug 的時候發現連自己都要想半天,還是整理起來好了… 假設 $v 是未經過濾的變數,要放到不同地方要做不同的處理:
- MySQL Statement:這已經是標準了,
mysql_escape_string($v)或是mysql_real_escape_string($v),或是改用 prepare + execute 的模式。 - 放在 HTML Form 的 input 元素裡面:要用
htmlentities($v, ENT_QUOTES)過濾後用 double-quote 包起來,原因是 $v 可以是"><script> ... (一堆邪惡 js 程式碼) ... </script>",這是一種 XSS 攻擊。 - 放在網址的 GET 參數裡:用
urlencode($v)。 - 呼叫外部程式帶入參數時 (像是
system()呼叫):用escapeshellarg($v)。

Pingback: 變數在 xx 的處理方式 at BlueCat is sleepy
Pingback: PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008 | 鬼仔's Blog