由於腳本語言和早期版本設計的許多原因,php專案存在不少安全隱患。從配置選項來看,可以做如下的最佳化。
1.屏蔽PHP錯誤輸出。
在/etc/php.ini(預設設定檔位置),將下列設定值改為Off
display_errors=Off
#不要將錯誤堆疊資訊直接輸出到網頁上,防止駭客加以利用相關資訊。
正確的做法是:
把錯誤日誌寫到日誌檔案中,方便排查問題。
2.屏蔽PHP版本。
預設情況下PHP版本會被顯示在回傳頭裡,如:
Response Headers X-powered-by: PHP/7.2.0
#將php.ini中如下的設定值改為Off
expose_php=Off
3.關閉全域變數。
如果開啟全域變數會使一些表單提交的資料自動註冊為全域變數。程式碼如下:
<form action="/login" method="post"> <input name="username" type="text"> <input name="password" type="password"> <input type="submit" value="submit" name="submit"> </form>
如果開啟了全域變量,則伺服器端PHP腳本可以用$username和$password來取得到使用者名稱和密碼,這會造成極大的腳本注入危險。
開啟方法是在php.ini中修改如下:
#register_globals=On
建議關閉,參數如下:
register_globals=Off
關閉後,就只能從$_POST、$_GET、$_REQUEST裡面取得相關參數。
4.檔案系統限制
#可以透過open_basedir來限制PHP可以存取的系統目錄。
如果不限制使用下面的腳本程式碼(hack.php)可以取得到系統密碼。
<?php echo file_get_contents('/etc/passwd');
當設定了後則會報錯,不再顯示相關信息,讓系統目錄b不會被非法訪問:
PHP Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3 Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3 PHP Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3 Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3
設定方法如下:
open_basedir=/var/www
5.禁止遠端資源存取。
allow_url_fopen=Off allow_url_include=Off
其他第三方安全擴充
6.Suhosin。
Suhosin是一個PHP程式的保護系統。它的設計初衷是為了保護伺服器和用戶,抵禦PHP程式和PHP核心中已知或未知的缺陷(感覺挺實用的,可以抵禦一些小攻擊)。 Suhosin有兩個獨立的部分,使用時可以分開使用或合併使用。
第一部分是一個用於PHP核心的補丁,它能抵禦緩衝區溢位或格式化串的弱點(這個必須的!);
第二部分是一個強大的PHP擴充(擴充模式挺好的,安裝方便…),包含其他所有的保護措施。
安裝擴充功能
wget http://download.suhosin.org/suhosin-0.9.37.1.tar.gz tar zxvf suhosin-0.9.37.1.tar.gz cd suhosin-0.9.37.1/ phpize ./configure --with-php-config=/usr/local/bin/php-config make make install 在php.ini下加入suhosin.so即可 extension=suhosin.so
特性
● 模擬器保護模式
● 增加兩個函數sha256()和sha256_file( )到PHP核心中
● 所有平台,加入CRYPT_BLOWFISH到函數crypt()中
● 開啟對phpinfo()頁的透明保護
● SQL資料庫使用者保護(測試階段)
執行階段保護
● 加密cookies
● 防止不同種類的包含漏洞(不允許遠端URL包含(黑色/白名單);不允許包含已上傳的檔案;防止目錄穿越攻擊)
● 允許禁止preg_replace()
● 允許禁止eval()函數
#● 通過設定一個最大執行深度,來防止無窮遞歸
● 支援每個vhost設定黑白名單
● 為程式碼執行提供分離的函數黑白名單
● 防止HTTP回應分割漏洞
● 防止腳本控制memory_limit選項
● 保護PHP的superglobals,如函數extract(),import_request_vars()
● 防止mail()函數的新行攻擊
● 防止preg_replace()的攻擊
##● 防止preg_replace()的攻擊
#Session 保護
● 加密session資料#● 防止session被劫持● 防止超長的session id● 防止惡意的session idSESSION裡的資料通常在伺服器上的明文存放的。這裡透過在服務端來加解密$_SESSION。這樣將Session的句柄存放在Memcache或資料庫時,就不會被輕易攻破,很多時候我們的session資料會存放一些敏感欄位。 這個特性在預設情況下是啟用的,也可以透過php.ini來修改:suhosin.session.encrypt = On suhosin.session.cryptkey = zuHywawAthLavJohyRilvyecyondOdjo suhosin.session.cryptua = On suhosin.session.cryptdocroot = On ;; IPv4 only suhosin.session.cryptraddr = 0 suhosin.session.checkraddr = 0
Cookie加密
Cookie在客戶端瀏覽器的傳輸的HTTP頭也是明文的。透過加密cookie,您可以保護您的應用程式對眾多的攻擊,例如Cookie篡改:攻擊者可能會嘗試猜測其他合理的cookie值來攻擊程式。 跨應用程式使用Cookie:不正確配置的應用程式可能具有相同的會話存儲,如所有會話預設儲存在/tmp目錄下,一個應用程式的cookie可能永遠不會被重新用於另一應用,只要加密金鑰不同。 Cookie加密在php.ini中的設定:
suhosin.cookie.encrypt = On ;; the cryptkey should be generated, e.g. with 'apg -m 32' suhosin.cookie.cryptkey = oykBicmyitApmireipsacsumhylWaps1 suhosin.cookie.cryptua = On suhosin.cookie.cryptdocroot = On ;; whitelist/blacklist (use only one) ;suhosin.cookie.cryptlist = WALLET,IDEAS suhosin.cookie.plainlist = LANGUAGE ;; IPv4 only suhosin.cookie.cryptraddr = 0 suhosin.cookie.checkraddr = 0 Blocking Functions 测试 ##默认PHP的Session保存在tmp路径下 ll -rt /tmp | grep sess ##扩展未开启时查看某条sesson的数据 cat sess_ururh83qvkkhv0n51lg17r4aj6 //记录是明文的 ##扩展开启后查看某条sesson 的数据 cat sess_ukkiiiheedupem8k4hheo0b0v4 //记录是密文的 可见加密对安全的重要性阻斷功能白名單
##显式指定指定白名单列表 suhosin.executor.func.whitelist = htmlentities,htmlspecialchars,base64_encode suhosin.executor.eval.whitelist = htmlentities,htmlspecialchars,base64_encode <?php echo htmlentities('<test>'); eval('echo htmlentities("<test>");');黑名單###
##显式指定指定黑名单列表 suhosin.executor.func.blacklist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand suhosin.executor.eval.whitelist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand 通过日志来查看非法调用黑白名单 suhosin.simulation = 1 suhosin.log.file = 511 suhosin.log.file.name = /tmp/suhosin-alert.log###其他配置項###
suhosin.executor.include.max_traversal 扩目录的最大深度,可以屏蔽切换到非法路径 suhosin.executor.include.whitelist 允许包含的URL,用逗号分隔 suhosin.executor.include.blacklist 禁止包含的URL,用逗号分隔 suhosin.executor.disable_eval = On 禁用eval函数 suhosin.upload.max_uploads suhosin.upload.disallow_elf suhosin.upload.disallow_binary suhosin.upload.remove_binary suhosin.upload.verification_script 上传文件检查脚本,可以来检测上传的内容是否包含webshell特征
使用Suhosin,你可以得到一些错误日志,你能把这些日志放到系统日志中,也可以同时写到其他任意的日志文件中去;
它还可以为每一个虚拟主机创建黑名单和白名单;
可以过滤GET和POST请求、文件上载和cookie;
你还能传送加密的会话和cookie,可以设置不能传送的存储上线等等;
它不像原始的PHP强化补丁,Suhosin是可以被像Zend Optimizer这样的第三方扩展软件所兼容的。
更多相关php知识,请访问php教程!
以上是PHP的一些安全設定(最佳化)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

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

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能