重要通知 :
重要通知 :
PHP應(yīng)用部署后,開發(fā)者或者運維人員應(yīng)該時刻關(guān)注PHP方面的漏洞消息,升級PHP版本,對PHP環(huán)境進行安全加固。本文將給大家介紹如何從WEB安全方面讓你的網(wǎng)站更堅固更安全。
1.啟用 PHP 的安全模式
PHP 環(huán)境提供的安全模式是一個非常重要的內(nèi)嵌安全機制,PHP 安全模式能有效控制一些 PHP 環(huán)境中的函數(shù)(例如system()函數(shù)),對大部分的文件操作函數(shù)進行權(quán)限控制,同時不允許對某些關(guān)鍵文件進行修改(例如 /etc/passwd)。但是,默認(rèn)的 php.ini 配置文件并沒有啟用安全模式。
您可以通過修改 php.ini 配置文件啟用 PHP 安全模式:
safe_mode = on
2.用戶組安全
當(dāng)您啟用安全模式后,如果safe_mode_gid選項被關(guān)閉,PHP 腳本能夠?qū)ξ募M行訪問,且相同用戶組的用戶也能夠?qū)υ撐募M行訪問。
因此,建議您將該選項設(shè)置為關(guān)閉狀態(tài):
safe_mode_gid = off
注意: 該選項參數(shù)僅適用于 Linux 操作系統(tǒng)。
如果不進行該設(shè)置,您可能無法對服務(wù)器網(wǎng)站目錄下的文件進行操作。
3.安全模式下執(zhí)行程序主目錄
如果啟用了安全模式后,想要執(zhí)行某些程序的時候,可以指定需要執(zhí)行程序的主目錄,例如:
safe_mode_exec_dir = /usr/bin
一般情況下,如果不需要執(zhí)行什么程序,建議您不要指定執(zhí)行系統(tǒng)程序的目錄。您可以指定一個目錄,然后把需要執(zhí)行的程序拷貝到這個目錄即可,例如:
safe_mode_exec_dir = /temp/cmd
但是,更推薦您不要執(zhí)行任何程序。這種情況下,只需要將執(zhí)行目錄指向網(wǎng)頁目錄即可:
safe_mode_exec_dir = /usr/www
注意:執(zhí)行目錄的路徑以您實際操作系統(tǒng)目錄路徑為準(zhǔn)。
4.安全模式下包含文件
如果您需要在安全模式下包含某些公共文件,您只需要修改以下選項即可:
safe_mode_include_dir = /usr/www/include/
一般情況下,PHP 腳本中包含的文件都是在程序已經(jīng)寫好的,可以根據(jù)您的具體需要進行設(shè)置。
5.控制 PHP 腳本能訪問的目錄
使用open_basedir選項能夠控制 PHP 腳本只能訪問指定的目錄,這樣能夠避免 PHP 腳本訪問不應(yīng)該訪問的文件,一定程度下降低了 phpshell 的危害。一般情況下,可以設(shè)置為只能訪問網(wǎng)站目錄:
open_basedir = /usr/www
6.關(guān)閉危險函數(shù)
如果您啟用了安全模式,那么可以不需要設(shè)置函數(shù)禁止,但為了安全考慮,還是建議您進行相關(guān)設(shè)置。例如,您不希望執(zhí)行包括system()等在內(nèi)的執(zhí)行命令的 PHP 函數(shù),以及能夠查看 PHP 信息的phpinfo()等函數(shù),那么您可以通過以下設(shè)置禁止這些函數(shù):
disable_functions = system, passthru, exec, shell_exec, popen, phpinfo, escapeshellarg, escapeshellcmd, proc_close, proc_open, dl
如果您想要禁止對于任何文件和目錄的操作,那么您可以關(guān)閉以下文件相關(guān)操作。
disable_functions = chdir, chroot, dir, getcwd, opendir, readdir, scandir, fopen, unlink, delete, copy, mkdir, rmdir, rename, file, file_get_contents, fputs, fwrite, chgrp,chmod, chown
注意: 以上設(shè)置中只列舉了部分比較常用的文件處理函數(shù),您也可以將上面的執(zhí)行命令函數(shù)和這些文件處理函數(shù)相結(jié)合,就能給抵制大部分的 phpshell 威脅。
7.關(guān)閉 PHP 版本信息在 HTTP 頭中的泄露
為了防止黑客獲取服務(wù)器中 PHP 版本的信息,您可以禁止該信息在 HTTP 頭部內(nèi)容中泄露:
expose_php = off
這樣設(shè)置之后,黑客在執(zhí)行telnet <domain> 80嘗試連接您的服務(wù)器的時候,將無法看到 PHP 的版本信息。
8.關(guān)閉注冊全局變量
在 PHP 環(huán)境中提交的變量,包括使用 POST 或者 GET 命令提交的變量,都將自動注冊為全局變量,能夠被直接訪問。這對您的服務(wù)器是非常不安全的,因此建議您將注冊全局變量的選項關(guān)閉,禁止將所提交的變量注冊為全局變量。
register_globals = off
注意: 該選項參數(shù)在 PHP 5.3 以后的版本中已被移除。
當(dāng)然,如果這樣設(shè)置之后,獲取對應(yīng)變量的時候就需要采取合理方式。例如,獲取 GET 命令提交的變量 var,就需要使用$_GET['var']命令來進行獲取,在進行 PHP 程序設(shè)計時需要注意。
9.SQL 注入防護
SQL 注入是一個非常危險的問題,小則造成網(wǎng)站后臺被入侵,重則導(dǎo)致整個服務(wù)器淪陷。
magic_quotes_gpc選項默認(rèn)是關(guān)閉的。如果打開該選項,PHP 將自動把用戶提交對 SQL 查詢的請求進行轉(zhuǎn)換(例如,把 ’ 轉(zhuǎn)換為 \’ 等),這對于防止 SQL 注入攻擊有很大作用,因此建議您將該選項設(shè)置為:
magic_quotes_gpc = on
注意: 該選項參數(shù)在 PHP 5.4.0 以后的版本中已被移除。
所以最好使用PDO預(yù)處理方式處理SQL查詢。
10.錯誤信息控制
一般 PHP 環(huán)境在沒有連接到數(shù)據(jù)庫或者其他情況下會有錯誤提示信息,錯誤信息中可能包含 PHP 腳本當(dāng)前的路徑信息或者查詢的 SQL 語句等信息,這類信息如果暴露給黑客是不安全的,因此建議您禁止該錯誤提示:
display_errors = Off
如果您確實要顯示錯誤信息,一定要設(shè)置顯示錯誤信息的級別。例如,只顯示警告以上的錯誤信息:
error_reporting = E_WARNING & E_ERROR
注意: 強烈建議您關(guān)閉錯誤提示信息。
11.錯誤日志
建議您在關(guān)閉錯誤提示信息后,對于錯誤信息進行記錄,便于排查服務(wù)器運行異常的原因:
log_errors = On
同時,需要設(shè)置錯誤日志存放的目錄,建議您將 PHP 錯誤日志與 Apache 的日志存放在同一目錄下:
error_log = /usr/local/apache2/logs/php_error.log
注意: 該文件必須設(shè)置允許 Apache 用戶或用戶組具有寫的權(quán)限。
這個配置我們需要修改的文件是php.ini
禁用了這個函數(shù)
沒禁用phpinfo這個函數(shù)
重啟Apache,是剛才的函數(shù)生效
可以看到以及無法訪問了
Php里面有很多函數(shù)可以執(zhí)行系統(tǒng)命令,這樣的函數(shù)有system,exec,exec_shell(執(zhí)行系統(tǒng)命令的函數(shù))假設(shè)php環(huán)境里面有使用這樣的函數(shù),就可以直接對操作系統(tǒng)執(zhí)行命令。比如添加用戶,執(zhí)行操作系統(tǒng)權(quán)限等操作。如果這些函數(shù)使用上有了問題,安攻擊者可以控制函數(shù)對命令的操作,這樣的話就能達到對操作系統(tǒng)的攻擊。
剛才我們通過函數(shù)禁用的配置,就可以把這些有敏感操作的函數(shù)都禁用了,這樣的話就能加強我們對php的安全。
basedir就是基準(zhǔn)目錄,能打開的基準(zhǔn)目錄,我們是可以進行配置的,在沒有進行這個配置之前,我們看看有沒有作用。我們可以看到,我們已經(jīng)跳出了web目錄,而讀到了/etc下的password文件
我們現(xiàn)在來配置一下,配置的原則是,必須要有根目錄
重啟Apache,我們再來訪問
發(fā)現(xiàn)已經(jīng)訪問不了,它的動作已經(jīng)被禁止在/var/www和/tmp目錄下
安全模式,和我們剛才禁用效果差不多,只是它內(nèi)置已經(jīng)禁用了很多函數(shù)。safe_mode可以打開為on,但因為它禁用的函數(shù)比較多,可能會影響我們程序的正常運行,所以一般情況下不建議打開安全模式。
其他配置:
1.disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,
ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,phpinfo #禁用的函數(shù)
2.expose_php = off #避免暴露PHP信息
3.display_errors = off #關(guān)閉錯誤信息提示
4.register_globals = off #關(guān)閉全局變量
5.enable_dl = off #不允許調(diào)用dl
6.allow_url_include = off #避免遠(yuǎn)程調(diào)用文件
7.session.cookie_httponly = 1 #http only開啟
8.upload_tmp_dir = /tmp #明確定義upload目錄
9.open_basedir = ./:/tmp:/home/wwwroot/ #限制用戶訪問的目錄
說明:本站部分內(nèi)容為會員轉(zhuǎn)載發(fā)布,如有損害您原創(chuàng)內(nèi)容,需要刪除,請聯(lián)系我們
建議:本站分享的產(chǎn)品是食品,不能代替藥物。有一定的調(diào)理作用,但不保證每個人服用后有同樣的效果。分享的案例均轉(zhuǎn)自互聯(lián)網(wǎng),如您有大病,建議您去看醫(yī)生!我們理念是平時要注重保健!
提示:為了您的健康,克制不良的生活習(xí)慣,戒煙、限酒,不吃各種油炸食品、方便面、燒烤肉類、少吃工廠的各種加工食品,多吃新鮮蔬菜、水果,適當(dāng)增加粗糧,配合服用等,詳情咨詢客服!
上一篇: CentOS8安全與配置教程
下一篇: 返回列表