透過對php一些伺服器端特性的配置來加強php的安全性_PHP教程
Jul 21, 2016 pm 04:09 PM
透過對php一些伺服器端特性的配置加強php的安全
by san@xfocus.org
前面象Shaun Clowes和rfp等都比較詳細的介紹了php、cgi程式在程式設(shè)計過程中遇到的問題,以及如何通
過應(yīng)用程式漏洞突破系統(tǒng),這篇文章我們來透過對php的一些伺服器端特性來進行設(shè)定加強php的安全。寫
cgi腳本的時候我們的確一定注意各種安全問題,對用戶輸入進行嚴格的過濾,但是常在岸邊走哪有不濕鞋
,吃燒餅?zāi)挠胁坏糁ヂ?,人有失蹄馬有失手,連著名的phpnuke、phpMyAdmin等程式都出現(xiàn)過很嚴重的
問題,更何況像我等小混混寫的腳本。所以現(xiàn)在我們假設(shè)php腳本已經(jīng)出現(xiàn)嚴重問題,比如像前一陣子
phpnuke的可以上傳php腳本的大問題了,我們?nèi)绾瓮高^對伺服器的配置使腳本出現(xiàn)如此問題也不能突破
系統(tǒng)。
1、編譯的時候注意補上已知的漏洞
?從4.0.5開始,php的mail函數(shù)加入了第五個參數(shù),但它沒有好好過濾,使得php應(yīng)用程式能突破
?safe_mode的限製而去執(zhí)行指令。所以使用4.0.5和4.0.6的時候在編譯前我們需要修改php原始碼包裡
?ext/standard/mail.c文件,禁止mail函數(shù)的第五參數(shù)或過濾shell字元。在mail.c檔的第152
?行,也就是下面這行:
?if (extra_cmd != NULL) {
?後面加上extra_cmd=NULL;或extra_cmd = php_escape__cm ;然後編譯php
?那我們就修補了這個漏洞。
2、修改php.ini設(shè)定檔
?以php發(fā)行版的php.ini-dist為藍本進行修改。
?1)Error handling and logging
?在Error handling and logging部分可以做一些設(shè)定。先找到:
?display_errors = On
?php缺省是打開錯誤訊息顯示的,我們把它改為:
?display_errors = Off
? php函數(shù)執(zhí)行錯誤的訊息將不會再顯示給用戶,這樣能在一定程度上防止攻擊者從
?錯誤訊息得知腳本的物理位置,以及一些其它有用的信息,起碼給攻擊者的黑箱偵測造成一定的障礙
?。這些錯誤訊息可能對我們自己有用,可以讓它寫到指定文件中去,那麼修改以下:
?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功能對許多函數(shù)進行了限製或禁用了,能在很大程度上解決php的安全問題。在
?Safe Mode部分找到:
?safe_mode = Off
?改為:
?safe_mode = On
像一些能執(zhí)行系統(tǒng)指令的函數(shù)shell_exec()和``被禁止,其它的一
?些執(zhí)行函數(shù)如:exec(), system(), passthru(), popen()將被限制只能執(zhí)行
?safe_mode_exec_dir指定目錄下的程式。如果你實在是要執(zhí)行一些指令或程序,找到以下:
?safe_mode_exec_dir =
?指定要執(zhí)行的程式的路徑,如:
?safe_mode exec
?然後把要用的程式拷到/usr/local/php/exec目錄下,這樣,像上面的被限制的函數(shù)還能執(zhí)行該目錄
?裡的程式。
?關(guān)於安全模式下受限函數(shù)的詳細資訊請參閱php主站的說明:
?http://www.php.net/manual/en/features.safe-mode.php
?3)disable_functions
?如果你對某些函數(shù)的危害性不太清楚,而且也沒有使用,索性把這些函數(shù)禁止了。求下面這行:
?disable_functions =
?在」=「後面加上要禁止的函數(shù),多函數(shù)用」,「隔開。
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的,而且它還開發(fā)了ZendOptimizer和ZendEncode
?等許多php的加強組件。優(yōu)化器ZendOptimizer只需在http://www.zend.com註冊就可以免費得到,
?下面幾個是用於4.0.5和4.0.6的ZendOptimizer,文件名分別對於各自的系統(tǒng):
?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
?優(yōu)化器的安裝非常方便,包裡面都有詳細的包裝說明。以UNIX版本的為例,看清作業(yè)系統(tǒng),把包包裡的
?ZendOptimizer.so檔案解壓縮到一個目錄,假設(shè)是/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
?那麼,優(yōu)化器已經(jīng)掛接成功了。
?但是編譯器ZendEncode並不是免費的,這裡提供給大家一個http://www.PHPease.com的馬勇設(shè)計的
?編譯器外殼,如果用於商業(yè)目的,請與http: //www.zend.com聯(lián)絡(luò)取得授權(quán)協(xié)議。
?php腳本編譯後,腳本的執(zhí)行速度增加不少,腳本檔案只能看到一堆亂碼,這將阻止攻擊者進一步分析服
?務(wù)器上的腳本程序,而且原先在php腳本裡以明文儲存的口令也得到了保密,如mysql的口令。不過在服
?務(wù)器端改腳本就比較麻煩了,還是本地改好再上傳吧。
5、檔案及目錄的權(quán)限設(shè)定
?web目錄裡除了上傳目錄,其它的目錄和檔案的權(quán)限一定不能讓nobody使用者有寫權(quán)限。否則,攻擊者可
?以修改主頁文件,所以web目錄的權(quán)限一定要設(shè)定好。
?還有,php腳本的屬主千萬不能是root,因為safe_mode下讀文件的函數(shù)被限製成被讀文件的屬主必須
?和當前執(zhí)行腳本的屬主是一樣才能被讀,否則如果錯誤顯示打開的話會顯示諸如以下的錯誤:
?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
?這樣我們能防止許多系統(tǒng)檔案被讀,例如:/etc/passwd等。
?上傳目錄和上傳腳本的屬主也要設(shè)成一樣,否則會出現(xiàn)錯誤的,在safe_mode下這些要注意。
6、mysql的啟動權(quán)限設(shè)定
?mysql要注意的是不要用root來啟動,最好另外建一個mysqladm用戶??梢栽?etc/rc.local等系統(tǒng)
?啟動腳本裡面加上一句:
?su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"
?這樣系統(tǒng)重開機後,也會自動用mysqladmin用戶啟動mysql進程。
7、日誌檔案及上傳目錄的審核及
?查看日誌和人的惰性有很大關(guān)係,要從那麼大的日誌檔案裡查找攻擊痕跡有些大海撈針,而且也未必有。
?web上傳的目錄裡的文件,也應(yīng)該經(jīng)常檢查,也許程式有問題,使用者傳上了一些非法的文件,例如執(zhí)行腳
?本等。
8、作業(yè)系統(tǒng)本身的修補程式
?一樣,給系統(tǒng)打已知漏洞的修補程式是系統(tǒng)管理員最基本的職責(zé),這也是最後一道防線。
?
經(jīng)過以上的配置,雖然說不上固若金湯,但是也在相當程度上給攻擊者的測試造成很多麻煩,即使php腳本程
序出現(xiàn)比較嚴重的漏洞,攻擊者也無法造成實際性的破壞。
如果您還有更古怪,更變態(tài)的配置方法,希望能一起分享分享;) (出處:viphot)

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

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

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

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

用戶語音輸入通過前端JavaScript的MediaRecorderAPI捕獲並發(fā)送至PHP後端;2.PHP將音頻保存為臨時文件後調(diào)用STTAPI(如Google或百度語音識別)轉(zhuǎn)換為文本;3.PHP將文本發(fā)送至AI服務(wù)(如OpenAIGPT)獲取智能回復(fù);4.PHP再調(diào)用TTSAPI(如百度或Google語音合成)將回復(fù)轉(zhuǎn)為語音文件;5.PHP將語音文件流式返回前端播放,完成交互。整個流程由PHP主導(dǎo)數(shù)據(jù)流轉(zhuǎn)與錯誤處理,確保各環(huán)節(jié)無縫銜接。

在PHP中搭建社交分享功能的核心方法是通過動態(tài)生成符合各平臺要求的分享鏈接。 1.首先獲取當前頁面或指定的URL及文章信息;2.使用urlencode對參數(shù)進行編碼;3.根據(jù)各平臺協(xié)議拼接生成分享鏈接;4.在前端展示鏈接供用戶點擊分享;5.動態(tài)生成頁面OG標籤優(yōu)化分享內(nèi)容展示;6.務(wù)必對用戶輸入進行轉(zhuǎn)義以防止XSS攻擊。該方法無需複雜認證,維護成本低,適用於大多數(shù)內(nèi)容分享需求。

要實現(xiàn)PHP結(jié)合AI進行文本糾錯與語法優(yōu)化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開源NLP庫;2.通過PHP的curl或Guzzle調(diào)用API並處理返回結(jié)果;3.在應(yīng)用中展示糾錯信息並允許用戶選擇是否採納;4.使用php-l和PHP_CodeSniffer進行語法檢測與代碼優(yōu)化;5.持續(xù)收集反饋並更新模型或規(guī)則以提升效果。選擇AIAPI時應(yīng)重點評估準確率、響應(yīng)速度、價格及對PHP的支持。代碼優(yōu)化應(yīng)遵循PSR規(guī)範、合理使用緩存、避免循環(huán)查詢、定期審查代碼,並藉助X

PHP通過數(shù)據(jù)庫事務(wù)與FORUPDATE行鎖確保庫存扣減原子性,防止高並發(fā)超賣;2.多平臺庫存一致性需依賴中心化管理與事件驅(qū)動同步,結(jié)合API/Webhook通知及消息隊列保障數(shù)據(jù)可靠傳遞;3.報警機制應(yīng)分場景設(shè)置低庫存、零/負庫存、滯銷、補貨週期和異常波動策略,並按緊急程度選擇釘釘、短信或郵件通知責(zé)任人,且報警信息需完整明確,以實現(xiàn)業(yè)務(wù)適配與快速響應(yīng)。

PHPisstillrelevantinmodernenterpriseenvironments.1.ModernPHP(7.xand8.x)offersperformancegains,stricttyping,JITcompilation,andmodernsyntax,makingitsuitableforlarge-scaleapplications.2.PHPintegrateseffectivelyinhybridarchitectures,servingasanAPIgateway

避免N 1查詢問題,通過提前加載關(guān)聯(lián)數(shù)據(jù)來減少數(shù)據(jù)庫查詢次數(shù);2.僅選擇所需字段,避免加載完整實體以節(jié)省內(nèi)存和帶寬;3.合理使用緩存策略,如Doctrine的二級緩存或Redis緩存高頻查詢結(jié)果;4.優(yōu)化實體生命週期,定期調(diào)用clear()釋放內(nèi)存以防止內(nèi)存溢出;5.確保數(shù)據(jù)庫索引存在並分析生成的SQL語句以避免低效查詢;6.在無需跟蹤變更的場景下禁用自動變更跟蹤,改用數(shù)組或輕量模式提升性能。正確使用ORM需結(jié)合SQL監(jiān)控、緩存、批量處理和適當優(yōu)化,在保持開發(fā)效率的同時確保應(yīng)用性能。

要構(gòu)建彈性的PHP微服務(wù),需使用RabbitMQ實現(xiàn)異步通信,1.通過消息隊列解耦服務(wù),避免級聯(lián)故障;2.配置持久化隊列、持久化消息、發(fā)布確認和手動ACK以確保可靠性;3.使用指數(shù)退避重試、TTL和死信隊列安全處理失??;4.通過supervisord等工具守護消費者進程並啟用心跳機制保障服務(wù)健康;最終實現(xiàn)系統(tǒng)在故障中持續(xù)運作的能力。

使用正確的PHP基礎(chǔ)鏡像並配置安全、性能優(yōu)化的Docker環(huán)境是實現(xiàn)生產(chǎn)就緒的關(guān)鍵。 1.選用php:8.3-fpm-alpine作為基礎(chǔ)鏡像以減少攻擊面並提升性能;2.通過自定義php.ini禁用危險函數(shù)、關(guān)閉錯誤顯示並啟用Opcache及JIT以增強安全與性能;3.使用Nginx作為反向代理,限制訪問敏感文件並正確轉(zhuǎn)發(fā)PHP請求至PHP-FPM;4.採用多階段構(gòu)建優(yōu)化鏡像,移除開發(fā)依賴,設(shè)置非root用戶運行容器;5.可選Supervisord管理多個進程如cron;6.部署前驗證無敏感信息洩
