OWASP 發表了一篇名為 PHP Top 5(PHP 五大常見保安問題)的文章,SANS Top 20 2005’s PHP Section(2005 年度 SANS 互聯網 20 大安全漏洞 PHP 章節)就是根據這一篇文章的研究而寫成,研究的方法是在 Bugtraq 上搜尋所有包含 PHP 的文章,對每一個個案進行分析及分類,然後作者列出五大最常見的保安問題,與及他們的預防方法,在文章的末尾做這還列出了一些參考資料,對於編寫安全堅固的 PHP 應用程式很有幫助。
以下扼要簡述文章提及的五項保安問題,有關詳情請參考原文。
|
|
在上面的例子倘若用戶送回來的 report_name 是一個遠端程式的 URL,或者在分享主機的環境中指向另一個用戶程式的路徑,便會引發保安問題。
|
|
在上面的例子倘若用戶送回來的 comment 包含一些 JavaScript,這些 JavaScript 便會在用戶端執行。
|
|
在上面的例子,應用程式直接把從用戶送來的 TBL_NAME 插入 SQL 指令之中,倘若 TBL_NAME 的值是「USERS; DELETE FROM USERS」,數據庫便會執行 SELECT * FROM USERS,與及 DELETE FROM USERS,顯然第二句不是系統管理員希望見到的。
不少 PHP 的配置變量和它們的預設值都很有爭議性,例如 register_globals、allow_url_fopen、magic_quotes_gpc、safe_mode、open_basedir 等等,業界對於如何配置這些變量以達到最高的安全性一直沒有共識,事實上部分變量的功能很少有機會用得上,但卻很容易做成安全性問題。
這種攻擊在共用主機的環境中特別容易發生,主要的攻擊手段包括載入本機的系統檔案(例如 /etc/passwd)、騎劫 session(通常儲存在 /tmp)等等。