CGI 全寫是 Common Gateway Interface,CGI script 可以用系統支援的程式語言編寫,例如 C/C++ 及 Perl 等。而 CGI 在系統上是有可執行,也就是說任何人也可以透過網站執行惡意指令,例如查看系統檔案及shell access 等。

而大多數的漏洞也是因為沒有檢查用戶的輸入,而讓惡意攻擊者透過 web 執行指令,例如以下 URL:

http://host/cgi-bin/query?%0a/bin/cat%20/etc/passwd

以上的 (%0a) 是開新一行, (%20) 是空格,那便這句 URL 便會透過 /bin/cat 開啟 /etc/password 檔案。

除了開啟系統檔案外,系統也可能被當成 Denial of service (DoS) 的工具:

http://host/cgi-bin/ncommerce3/ExecMacro/macro.d2w/%0a%0a..(aprox 1000)..%0a

所以在編寫 CGI 時要特別注意安全的問題,以下是一些建議:

– 不要隨便讀取用戶的輸入,即使必要也需對特別的字串做過濾。
– 不要用 eval 建立執行指令字串。
– 使用 popen() 及 system() 時要謹慎。
– 關閉 server side includes (SSI)。