透過對php一些伺服器端特性的配置來加強php的安全性_PHP教程
透過對php一些伺服器端特性的配置加強php的安全
by san@xfocus.org
前面象Shaun Clowes和rfp等都比較詳細的介紹了php、cgi程式在程式設計過程中遇到的問題,以及如何通
過應用程式漏洞突破系統,這篇文章我們來透過對php的一些伺服器端特性來進行設定加強php的安全。寫
cgi腳本的時候我們的確一定注意各種安全問題,對用戶輸入進行嚴格的過濾,但是常在岸邊走哪有不濕鞋
,吃燒餅哪有不掉芝麻,人有失蹄馬有失手,連著名的phpnuke、phpMyAdmin等程式都出現過很嚴重的
問題,更何況像我等小混混寫的腳本。所以現在我們假設php腳本已經出現嚴重問題,比如像前一陣子
phpnuke的可以上傳php腳本的大問題了,我們如何透過對伺服器的配置使腳本出現如此問題也不能突破
系統。
1、編譯的時候注意補上已知的漏洞
從4.0.5開始,php的mail函數加入了第五個參數,但它沒有好好過濾,使得php應用程式能突破
safe_mode的限製而去執行指令。所以使用4.0.5和4.0.6的時候在編譯前我們需要修改php原始碼包裡
ext/standard/mail.c文件,禁止mail函數的第五參數或過濾shell字元。在mail.c檔的第152
行,也就是下面這行:
if (extra_cmd != NULL) {
後面加上extra_cmd=NULL;或extra_cmd = php_escape__cm ;然後編譯php
那我們就修補了這個漏洞。
2、修改php.ini設定檔
以php發行版的php.ini-dist為藍本進行修改。
1)Error handling and logging
在Error handling and logging部分可以做一些設定。先找到:
display_errors = On
php缺省是打開錯誤訊息顯示的,我們把它改為:
display_errors = Off
php函數執行錯誤的訊息將不會再顯示給用戶,這樣能在一定程度上防止攻擊者從
錯誤訊息得知腳本的物理位置,以及一些其它有用的信息,起碼給攻擊者的黑箱偵測造成一定的障礙
。這些錯誤訊息可能對我們自己有用,可以讓它寫到指定文件中去,那麼修改以下:
log_errors = Off
改為:
log_errors = On
;error_log = filename
去掉前面的;註釋,把filename改為指定文件,如/usr/local/apache/logs/php_error. log
error_log = /usr/local/apache/logs/php_error.log
這樣所有的錯誤都會寫到php_error.log檔案裡。
2)Safe Mode
php的safe_mode功能對許多函數進行了限製或禁用了,能在很大程度上解決php的安全問題。在
Safe Mode部分找到:
safe_mode = Off
改為:
safe_mode = On
像一些能執行系統指令的函數shell_exec()和``被禁止,其它的一
些執行函數如:exec(), system(), passthru(), popen()將被限制只能執行
safe_mode_exec_dir指定目錄下的程式。如果你實在是要執行一些指令或程序,找到以下:
safe_mode_exec_dir =
指定要執行的程式的路徑,如:
safe_mode exec
然後把要用的程式拷到/usr/local/php/exec目錄下,這樣,像上面的被限制的函數還能執行該目錄
裡的程式。
關於安全模式下受限函數的詳細資訊請參閱php主站的說明:
http://www.php.net/manual/en/features.safe-mode.php
3)disable_functions
如果你對某些函數的危害性不太清楚,而且也沒有使用,索性把這些函數禁止了。求下面這行:
disable_functions =
在」=「後面加上要禁止的函數,多函數用」,「隔開。
3、修改httpd.conf
如果你只允許你的php腳本程式在web目錄裡操作,還可以修改httpd.conf檔案限制php的操作路徑。比
如你的web目錄是/usr/local/apache/htdocs,那麼在httpd.conf裡面加上這麼幾行:
php_admin_value open_basedir /usr/local/apache/htdocs
這樣,如果腳本要讀取/usr/local/apache/htdocs以外的檔案將不會被允許,如果錯誤顯示打開的話
會提示這樣的錯誤:
Warning: open_basedir restriction in effect. File is in wrong directory in
/usr/local/ > 等等。
4、對php程式碼進行編譯
Zend對php的貢獻很大,php4的引擎就是用Zend的,而且它還開發了ZendOptimizer和ZendEncode
等許多php的加強組件。優化器ZendOptimizer只需在http://www.zend.com註冊就可以免費得到,
下面幾個是用於4.0.5和4.0.6的ZendOptimizer,文件名分別對於各自的系統:
ZendOptimizer-1.1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-LinZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i58o. .0-PHP_4.0.5-Solaris-sparc.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Windows-i386.zip
優化器的安裝非常方便,包裡面都有詳細的包裝說明。以UNIX版本的為例,看清作業系統,把包包裡的
ZendOptimizer.so檔案解壓縮到一個目錄,假設是/usr/local/lib下,在php.ini裡加上兩句:
zend_optimizer.optimization_level=15
zend_extension="/usr/local/lib/ZendOptimizer.so"
就可以了。用phpinfo()看到Zend圖示左邊有下面文字:
with Zend Optimizer v1.1.0, Copyright (c) 1998-2000, by Zend Technologies
那麼,優化器已經掛接成功了。
但是編譯器ZendEncode並不是免費的,這裡提供給大家一個http://www.PHPease.com的馬勇設計的
編譯器外殼,如果用於商業目的,請與http: //www.zend.com聯絡取得授權協議。
php腳本編譯後,腳本的執行速度增加不少,腳本檔案只能看到一堆亂碼,這將阻止攻擊者進一步分析服
務器上的腳本程序,而且原先在php腳本裡以明文儲存的口令也得到了保密,如mysql的口令。不過在服
務器端改腳本就比較麻煩了,還是本地改好再上傳吧。
5、檔案及目錄的權限設定
web目錄裡除了上傳目錄,其它的目錄和檔案的權限一定不能讓nobody使用者有寫權限。否則,攻擊者可
以修改主頁文件,所以web目錄的權限一定要設定好。
還有,php腳本的屬主千萬不能是root,因為safe_mode下讀文件的函數被限製成被讀文件的屬主必須
和當前執行腳本的屬主是一樣才能被讀,否則如果錯誤顯示打開的話會顯示諸如以下的錯誤:
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd 0ed by uid in /usr/local/apache/htdocs/open.php
on line 3
這樣我們能防止許多系統檔案被讀,例如:/etc/passwd等。
上傳目錄和上傳腳本的屬主也要設成一樣,否則會出現錯誤的,在safe_mode下這些要注意。
6、mysql的啟動權限設定
mysql要注意的是不要用root來啟動,最好另外建一個mysqladm用戶。可以在/etc/rc.local等系統
啟動腳本裡面加上一句:
su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"
這樣系統重開機後,也會自動用mysqladmin用戶啟動mysql進程。
7、日誌檔案及上傳目錄的審核及
查看日誌和人的惰性有很大關係,要從那麼大的日誌檔案裡查找攻擊痕跡有些大海撈針,而且也未必有。
web上傳的目錄裡的文件,也應該經常檢查,也許程式有問題,使用者傳上了一些非法的文件,例如執行腳
本等。
8、作業系統本身的修補程式
一樣,給系統打已知漏洞的修補程式是系統管理員最基本的職責,這也是最後一道防線。
經過以上的配置,雖然說不上固若金湯,但是也在相當程度上給攻擊者的測試造成很多麻煩,即使php腳本程
序出現比較嚴重的漏洞,攻擊者也無法造成實際性的破壞。
如果您還有更古怪,更變態的配置方法,希望能一起分享分享;) (出處:viphot)

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。
