<rp id="lvh8p"><object id="lvh8p"></object></rp>

      <dd id="lvh8p"><track id="lvh8p"></track></dd>

            php安全加固設置,全面打造安全的生產環境

            網站制作12年

            php安全加固設置,全面打造安全的生產環境

            2018-09-06 21:56:33


            PHP應用部署后,開發者或者運維人員應該時刻關注PHP方面的漏洞消息,升級PHP版本,對PHP環境進行安全加固。本文將給大家介紹如何從WEB安全方面讓你的網站更堅固更安全。

            1.啟用 PHP 的安全模式

            PHP 環境提供的安全模式是一個非常重要的內嵌安全機制,PHP 安全模式能有效控制一些 PHP 環境中的函數(例如system()函數),對大部分的文件操作函數進行權限控制,同時不允許對某些關鍵文件進行修改(例如 /etc/passwd)。但是,默認的 php.ini 配置文件并沒有啟用安全模式。

            您可以通過修改 php.ini 配置文件啟用 PHP 安全模式:

            safe_mode = on
            

            2.用戶組安全

            當您啟用安全模式后,如果safe_mode_gid選項被關閉,PHP 腳本能夠對文件進行訪問,且相同用戶組的用戶也能夠對該文件進行訪問。

            因此,建議您將該選項設置為關閉狀態:

            safe_mode_gid = off
            

            注意: 該選項參數僅適用于 Linux 操作系統。

            如果不進行該設置,您可能無法對服務器網站目錄下的文件進行操作。

            3.安全模式下執行程序主目錄

            如果啟用了安全模式后,想要執行某些程序的時候,可以指定需要執行程序的主目錄,例如:

            safe_mode_exec_dir = /usr/bin
            

            一般情況下,如果不需要執行什么程序,建議您不要指定執行系統程序的目錄。您可以指定一個目錄,然后把需要執行的程序拷貝到這個目錄即可,例如:

            safe_mode_exec_dir = /temp/cmd
            

            但是,更推薦您不要執行任何程序。這種情況下,只需要將執行目錄指向網頁目錄即可:

            safe_mode_exec_dir = /usr/www
            

            注意:執行目錄的路徑以您實際操作系統目錄路徑為準。

            4.安全模式下包含文件

            如果您需要在安全模式下包含某些公共文件,您只需要修改以下選項即可:

            safe_mode_include_dir = /usr/www/include/
            

            一般情況下,PHP 腳本中包含的文件都是在程序已經寫好的,可以根據您的具體需要進行設置。

            5.控制 PHP 腳本能訪問的目錄

            使用open_basedir選項能夠控制 PHP 腳本只能訪問指定的目錄,這樣能夠避免 PHP 腳本訪問不應該訪問的文件,一定程度下降低了 phpshell 的危害。一般情況下,可以設置為只能訪問網站目錄:

            open_basedir = /usr/www
            

            6.關閉危險函數

            如果您啟用了安全模式,那么可以不需要設置函數禁止,但為了安全考慮,還是建議您進行相關設置。例如,您不希望執行包括system()等在內的執行命令的 PHP 函數,以及能夠查看 PHP 信息的phpinfo()等函數,那么您可以通過以下設置禁止這些函數:

            disable_functions = system, passthru, exec, shell_exec, popen, phpinfo, escapeshellarg, escapeshellcmd, proc_close, proc_open, dl
            

            如果您想要禁止對于任何文件和目錄的操作,那么您可以關閉以下文件相關操作。

            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
            

            注意: 以上設置中只列舉了部分比較常用的文件處理函數,您也可以將上面的執行命令函數和這些文件處理函數相結合,就能給抵制大部分的 phpshell 威脅。

            7.關閉 PHP 版本信息在 HTTP 頭中的泄露

            為了防止黑客獲取服務器中 PHP 版本的信息,您可以禁止該信息在 HTTP 頭部內容中泄露:

            expose_php = off

            這樣設置之后,黑客在執行telnet <domain> 80嘗試連接您的服務器的時候,將無法看到 PHP 的版本信息。

            8.關閉注冊全局變量

            在 PHP 環境中提交的變量,包括使用 POST 或者 GET 命令提交的變量,都將自動注冊為全局變量,能夠被直接訪問。這對您的服務器是非常不安全的,因此建議您將注冊全局變量的選項關閉,禁止將所提交的變量注冊為全局變量。

            register_globals = off
            

            注意: 該選項參數在 PHP 5.3 以后的版本中已被移除。

            當然,如果這樣設置之后,獲取對應變量的時候就需要采取合理方式。例如,獲取 GET 命令提交的變量 var,就需要使用$_GET['var']命令來進行獲取,在進行 PHP 程序設計時需要注意。

            9.SQL 注入防護

            SQL 注入是一個非常危險的問題,小則造成網站后臺被入侵,重則導致整個服務器淪陷。

            magic_quotes_gpc選項默認是關閉的。如果打開該選項,PHP 將自動把用戶提交對 SQL 查詢的請求進行轉換(例如,把 ’ 轉換為 \’ 等),這對于防止 SQL 注入攻擊有很大作用,因此建議您將該選項設置為:

            magic_quotes_gpc = on
            

            注意: 該選項參數在 PHP 5.4.0 以后的版本中已被移除。

            所以最好使用PDO預處理方式處理SQL查詢。

            10.錯誤信息控制

            一般 PHP 環境在沒有連接到數據庫或者其他情況下會有錯誤提示信息,錯誤信息中可能包含 PHP 腳本當前的路徑信息或者查詢的 SQL 語句等信息,這類信息如果暴露給黑客是不安全的,因此建議您禁止該錯誤提示:

            display_errors = Off
            

            如果您確實要顯示錯誤信息,一定要設置顯示錯誤信息的級別。例如,只顯示警告以上的錯誤信息:

            error_reporting = E_WARNING & E_ERROR
            

            注意: 強烈建議您關閉錯誤提示信息。

            11.錯誤日志

             

            建議您在關閉錯誤提示信息后,對于錯誤信息進行記錄,便于排查服務器運行異常的原因:

            log_errors = On
            

            同時,需要設置錯誤日志存放的目錄,建議您將 PHP 錯誤日志與 Apache 的日志存放在同一目錄下:

            error_log = /usr/local/apache2/logs/php_error.log
            

            注意: 該文件必須設置允許 Apache 用戶或用戶組具有寫的權限。

            還有最重要的是升級系統補丁,升級PHP版本。

            本文摘自阿里云,本站編輯對原文稍作刪減。

            <rp id="lvh8p"><object id="lvh8p"></object></rp>

                <dd id="lvh8p"><track id="lvh8p"></track></dd>