Nginx環境下如何在PHP進行安全設定

2021-10-25 21:24:21 字數 2193 閱讀 5141

當下nginx越發流行,寶塔面板、oneinstack、lnmp等整合環境大多數都使用nginx作為web服務,nnginx + php情況下使用fpm(fastcgi 程序管理器)來執行php,這篇文章拋開php程式寫法不嚴謹造成的本身漏洞,單從web服務和php本身設定來加強php程式安全。

php提供的system()等函式可以直接執行系統命令,如果程式限制不嚴謹或寫法不規範,被駭客利用是非常危險的,禁用此類較為危險的函式非常有必要。需要修改php.ini,新增如下內容:

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,popen
跨站攻擊通常表現為a**被黑之後,駭客利用指令碼再次訪問b**或其它目錄,最終可能導致所有**全部淪陷。

open_basedir引數將php所能開啟的檔案限制在指定的目錄樹中,包括檔案本身。當程式要使用例如fopen()或file_get_contents()開啟乙個檔案時,這個檔案的位置將會被檢查。當檔案在指定的目錄樹之外,程式將拒絕開啟。open_basedir設定的方法比較多,這裡列出幾個常用的。

php.ini設定

可以直接修改php.ini直接加入

open_basedir="指定目錄"
從php指令碼上設定

在程式指令碼上限制:

ini_set('open_basedir', '指定目錄');
通過.user.ini 進行設定

先來看看官方具體是如何解釋.user.ini這個檔案的:

自 php 5.3.0 起,php 支援基於每個目錄的 .htaccess 風格的 ini 檔案。此類檔案僅被 cgi/fastcgi sapi 處理。此功能使得 pecl 的 htscanner 擴充套件作廢。如果使用 apache,則用 .htaccess 檔案有同樣效果。

除了主 php.ini 之外,php 還會在每個目錄下掃瞄 ini 檔案,從被執行的 php 檔案所在目錄開始一直上公升到 web 根目錄($_server['document_root'] 所指定的)。如果被執行的 php 檔案在 web 根目錄之外,則只掃瞄該目錄。

在 .user.ini 風格的 ini 檔案中只有具有 php_ini_perdir 和 php_ini_user 模式的 ini 設定可被識別。

簡而言之,也就是說當php以cgi/fastcgi sapi方式執行時,會去讀取乙個.user.ini的配置,我們可以在這裡面設定open_basedir引數來防止跨站。

在站點根目錄下新建乙個.user.ini,內容如下:

open_basedir=/data/wwwroot/:/tmp/:/proc/
為防止.user.ini被篡改,可以給這個檔案加上隱藏屬性。

chattr +i .user.ini
目前已知的寶塔面板,軍哥lnmp(lnmp.org)預設使用.user.ini來防止跨站,這個方式非常靈活,可以針對某個**單獨設定。

大多數php框架,如codeigniter、thinkphp都是單一入口,只需要index.php有入口許可權程式就能正常執行。上傳目錄、靜態檔案目錄完全沒必須要賦予php執行許可權,否則反而可能被利用。nginx可以通過下面的規則來禁止某個目錄執行php:

#uploads|templets|data 這些目錄禁止執行php

location ~* ^/(uploads|templets|data)/.*.(php|php5)$

以上主要是針對php本身設定和nginx上進行限制,若有不足還請指正。

Nginx環境下Php安裝

其實很簡單的事,我每次安裝貌似都會走彎路,所以還是記下來吧 centos 5.5 nginx 1.0.5 php 5.5.81.先安裝nginx tar zxvf nginx 1.0.5.tar.gz cd nginx 1.0.5 configure make make install2.安裝php...

如何在Linux環境下實現定時執行PHP的計畫任務

實踐操作如下 1 工具 putty.exe 2 伺服器環境 ubuntu linux系統 thinkphp 3.1.3 php5.6 mysql 4 然後,在專案根目錄下建立cron.php,如下 url timeout 60 data array header array ch curl init...

如何在windows下使用Nginx配置前端專案

最近要接手乙個新的專案,拿到檔案後開啟專案的一瞬間,我的腦殼是暈的,那個目錄結構。嗯,跟我寫過的和見過的太不一樣了,檔名都是拼音首字母縮寫,反正我是猜不出來。而且專案還需要用nginx啟動,我都沒用過這個東西。太難了,我真是太難了 後來在上乙個負責人的遠端指導 自己上網找方法 自己領悟 反正各方面的...