PHP是一種開源服務器端腳本語言,應用很廣泛。Apache web服務器提供了這種便利:通過HTTP或HTTPS協議,訪問文件和內容。配置不當的服務器端腳本語言會帶來各種各樣的問題。所以,使用php時要小心。以下是Linux下PHP+Apache的26個PHP程序員必知的安全方面的設置
為PHP安全提示而提供的示例環境
文件根目錄(DocumentRoot):/var/www/html
默認的Web服務器:Apache(可以使用Lighttpd或Nginx來取代Apache)
默認的PHP配置文件:/etc/php.ini
默認的PHP加載模塊配置目錄:/etc/php.d/
我們的示例php安全配置文件:/etc/php.d/security.ini(需要使用文本編輯器來創建該文件)
操作系統:RHEL/CentOS/FedoraLinux(相關指令應該與Debian/Ubuntu等其他任何Linux發行版或者OpenBSD/FreeBSD/HP-UX等其他類似Unix的操作系統兼容)。
默認的php服務器TCP/UDP端口:無
為本文所列的大多數操作編寫代碼時,假定它們將由運行bash外殼程序或其他任何現代外殼程序的根用戶來執行:
$ php -v
示例輸出:
PHP 5.3.3 (cli) (built: Oct 24 2011 08:35:41)Copyright (c) 1997-2010 The PHP GroupZend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
出于演示的用途,我會使用以下操作系統:
$cat/etc/redhat-release
示例輸出:
Red HatEnterprise Linux Server release 6.1 (Santiago)
基于PHP的應用程序面臨不同類型的攻擊。我注意到了幾種不同類型的攻擊:
XSS:跨站腳本是Web PHP應用程序中的一種安全漏洞,攻擊者可以利用該漏洞來竊取用戶的信息。你可以配置Apache,編寫更安全的PHP腳本(驗證所有的用戶輸入),以避免XSS攻擊。
SQL注入攻擊:這是PHP應用程序的數據庫層中的安全漏洞。用戶輸入不正確地過濾時,應用程序就能執行任何SQL語句。你可以配置Apache,編寫安全代碼(驗證和轉換所有的用戶輸入),以避免SQL注入攻擊。PHP中的一個常見做法是,在發送SQL查詢之前,使用名為mysql_real_escape_string()的函數,轉換參數。
文件上傳:它讓訪客可以將文件放在(將文件上傳到)你的服務器上。這會帶來眾多安全問題,比如刪除你的文件、刪除數據庫、獲取用戶詳細資料,不一而足。你可以使用php來禁用文件上傳,或編寫安全代碼(比如驗證用戶輸入,只允許PNG或GIF等圖像文件類型)。
添加本地和遠程文件:攻擊者可以從遠程服務器打開文件,執行任何PHP代碼。這讓他們得以上傳文件、刪除文件和安裝后門。可以配置php以禁用遠程文件執行功能。
eval() :將字符串作為PHP代碼來進行評估。攻擊者常常利用該函數來隱藏其在服務器本身上面的代碼和工具。你可以配置PHP,禁用eval()。
sea-surf攻擊(跨站請求偽造,CSRF):這種攻擊迫使最終用戶針對目前已驗證其身份的Web應用程序執行有害的操作。如果是平常的用戶,得逞的CSRF攻擊會危及最終用戶的數據和操作。但如果被盯上的最終用戶使用管理員帳戶,這會危及整個Web應用程序。
想查看一組編譯進去的PHP模塊,請輸入以下命令:
# php -m
我建議你使用模塊數量減少的PHP,以增強性能和安全。比如說,你可以通過刪除(移除)配置文件或者更名(或移動)一個名為/etc/php.d/sqlite3.ini的文件來禁用sqlite3模塊,操作如下:
#rm/etc/php.d/sqlite3.ini
或者
#mv/etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable
新聞熱點
疑難解答