phpcurl404
A. linux伺服器中木馬怎麼處理
以下從幾個方面在說明Linux系統環境安排配置防範和木馬後門查殺的方法:
一、Web Server(以Nginx為例)
1、為防止跨站感染,將虛擬主機目錄隔離(可以直接利用fpm建立多個程序池達到隔離效果)
2、上傳目錄、include類的庫文件目錄要禁止代碼執行(Nginx正則過濾)
3、path_info漏洞修正:
在nginx配置文件中增加:
if ($request_filename ~* (.*)\.php) {
set $php_url $1;
}
if (!-e $php_url.php) {
return 404;
}
4、重新編譯Web Server,隱藏Server信息
5、打開相關級別的日誌,追蹤可疑請求,請求者IP等相關信息。
二.改變目錄和文件屬性,禁止寫入
find -type f -name \*.php -exec chmod 444 {} \;
find -type d -exec chmod 555 {} \;
註:當然要排除上傳目錄、緩存目錄等;
同時最好禁止chmod函數,攻擊者可通過chmod來修改文件只讀屬性再修改文件!
三.PHP配置
修改php.ini配置文件,禁用危險函數:
disable_funcions = dl,eval,exec,passthru,system,popen,shell_exec,proc_open,proc_terminate,curl_exec,curl_multi_exec,show_source,touch,escapeshellcmd,escapeshellarg
四.Mysql資料庫賬號安全:
禁止mysql用戶外部鏈接,程序不要使用root賬號,最好單獨建立一個有限許可權的賬號專門用於Web程序。
五.查殺木馬、後門
grep -r –include=*.php 『[^a-z]eval($_POST』 . > grep.txt
grep -r –include=*.php 『file_put_contents(.*$_POST\[.*\]);』 . > grep.txt
把搜索結果寫入文件,下載下來慢慢分析,其他特徵木馬、後門類似。有必要的話可對全站所有文件來一次特徵查找,上傳圖片肯定有也捆綁的,來次大清洗。
查找近2天被修改過的文件:
find -mtime -2 -type f -name \*.php
注意:攻擊者可能會通過touch函數來修改文件時間屬性來避過這種查找,所以touch必須禁止
六.及時給Linux系統和Web程序打補丁,堵上漏洞
B. 如何在虛擬機上搭建php
虛擬機是window系統還是 linux系統。
window系統就很簡單了,直接下載一個集成環境,就可以運行了
linux 系統就要稍微麻煩點
1. php下載以及安裝
下載: wget http://am1.php.net/distributions/php-7.3.2.tar.gz
解壓: tar -zxvf php-7.3.2.tar.gz
進入目錄開始編譯安裝:
./configure --prefix=/opt/soft/php --enable-fpm
下面是直接把常用的擴展安裝好,免得後面在一個一個安裝(推薦)
./configure --prefix=/opt/soft/php --with-curl --with-mysqli --with-openssl --with-pdo-mysql --enable-fpm
make
sudo make install
設置快捷訪問方式: sudo cp /opt/soft/php/bin/php /usr/local/bin/
把php配置文件放在正確的位置
確認正確位置:php -i | grep php.ini
在下載的安裝包中將php配置文件移動過來: sudo cp /opt/packages/php-7.3.2/php.ini-proction /opt/soft/php/lib/php.ini
ps:以後可以通過 php --ini 查看文件所在位置
2. nginx下載以及安裝
和上面php一樣的步驟,下載--解壓--編譯--安裝
wget http://nginx.org/download/nginx-1.14.2.tar.gz
./configure --prefix=/opt/soft/nginx --sbin-path=/opt/soft/nginx/sbin/nginx --conf-path=/opt/soft/nginx/config/nginx.conf --error-log-path=/opt/soft/nginx/logs/error.log --pid-path=/opt/soft/nginx/logs/nginx.pid --http-log-path=/opt/soft/nginx/logs/access.log --with-http_stub_status_mole --with-http_ssl_mole
sudo make && make install
設置快捷訪問方式: sudo cp /opt/soft/nginx/sbin/nginx /usr/local/bin/
簡單配置nginx(詳細配置後面再重新開文章寫),然後瀏覽器直接訪問ip就能訪問了(這個時候只能訪問html,訪問php是直接下載文件)
開啟nginx: sudo nginx(sudo nginx -s reload 重啟nginx), 查看是否開起nginx: sudo netstat -anp | grep 80(埠號)
3. 配置nginx支持php
nginx不能直接和php通信,需要藉助FastCGI(高速地在HTTP伺服器和動態腳本語言間通信的介面),需要用到php-fpm(FastCGI Process Manager:FastCGI進程管理器, 他的具體概念可以參照這里搞清楚php-FPM到底是什麼),這也是為什麼在編譯安裝php的時候需要帶--enable-fpm這個擴展的原因.
I. 啟動php-fpm
進入到 /opt/soft/php/etc 這個目錄將php-fpm.conf.default改名為php-fpm.conf,編輯他查看最後一行
然後進入最後一行指向php-pm.d目錄,將www.conf.default改名成www.conf,並編輯成對應賬號,我這里是xunan
然後將/opt/soft/php/sbin/php-fpm設置快捷訪問方式,並啟動php-fpm,也就是執行下面兩個命令
sudo cp /opt/soft/php/sbin/php-fpm /usr/local/bin/ sudo php-fpm
ps: 重啟php-fpm: 先ps aux | grep php-fpm,然後kill掉對應的進程
II. 配置nginx支持php
具體配置:
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
按照上面配置完成後,在配置文件的root目錄下建立一個index.php,編輯
然後重啟nginx(sudo nginx -s reload),在瀏覽器ip訪問
C. 如何在iis下安裝php
CGI 用戶必須在 php.ini 中將 cgi.force_redirect 指令設為 0。其重要細節請閱讀 FAQ 中的cgi.force_redirect。此外,CGI 用戶可能需要設定 cgi.redirect_status_env 指令。在使用這些指令時,確保它們沒有在 php.ini 中被注釋掉。
*
PHP 4 的 CGI 文件名是 php.exe 而在 PHP 5 中是 php-cgi.exe。在 PHP 5 中,php.exe 是 CLI 版本,不是 CGI。
*
修改 Windows 的 PATH 環境變數以把 PHP 目錄包括進去。這樣 PHP 的 DLL 文件,可執行文件和 php.ini 就都可以保留在 PHP 目錄中而不用把 Windows 系統目錄搞亂了。更多細節見 FAQ 中的設定路徑 PATH。
*
IIS 專用用戶(通常為 IUSR_MACHINENAME)需要能夠讀取各個文件和目錄的許可權,例如 php.ini,docroot 和 session 的 tmp 目錄。
*
確保在 php.ini 中正確設定了 extension_dir 和 doc_root 指令的值。這些指令依賴於 PHP 被安裝的系統。在 PHP 4 中,extension_dir 是 extensions 而在 PHP 5 中是 ext。因此在 PHP 5 中 extensions_dir 的一個取值例子是 "c:\php\ext",IIS 的 doc_root 的取值例子是 "c:\Inetpub\wwwroot"。
*
PHP 擴展庫的 DLL 文件,如 php_mysql.dll 和 php_curl.dll,存放於 PHP 下載的 ZIP 包中(自動安裝包里沒有)。在 PHP 5 中,很多擴展庫都是 PECL 的一部分,可以從「Collection of PECL moles」包中下載,例如 php_zip.dll 和 php_ssh2.dll。點擊進入 PHP 下載頁。
*
在定義應用程序擴展名映射時,應選中「檢查文件是否存在」。以極小的性能為代價,IIS(或者 PWS)會在調用 PHP 之前檢查腳本文件是否存在並選出認證方法。這意味著 web 伺服器會提供一個有道理的 404 形式錯誤信息而不是一條 CGI 錯誤說什麼 PHP 沒有輸出任何數據。
Windows NT/200x/XP 和 IIS 4 或更高版本
PHP 可以安裝為 CGI 或者 ISAPI 模塊。不管哪種,都需要啟動 Microsoft 管理控制台(也可能是「Internet 信息服務」,在 Windows NT 4.0 Option Pack 中或者在 Windows 2000/XP 下的控制面板=>管理工具)。然後右鍵點擊 web 伺服器節點(通常為「默認網站」),並選擇「屬性」。
如果想用 CGI 方式,按如下方法進行:
*
選擇「主目錄」,「虛擬目錄」或「目錄」標簽頁,然後進行:
*
將執行許可權改為「純腳本」
*
點「配置」按鈕,選擇「映射」標簽頁。點擊「添加」按鈕,將「可執行文件」指向適當的 CGI 文件名。例如 PHP 5 的值可能是:C:\php\php-cgi.exe。在「擴展名」中填入 .php。選擇「全部動作」(或者「限制為」留空),選中「腳本引擎」。然後點擊「確定」。
*
設定合適的目錄安全性(在 Internet 信息服務中完成)。如果 NT 伺服器使用 NTFS 文件系統,給 I_USR_ 用戶加上 php.exe/php-cgi.exe 文件所在目錄的可執行許可權(通過資源管理器完成)。
要用 ISAPI 模塊方式,按如下方法進行:
*
如果不想用 PHP 進行 HTTP 認證,應該跳過這一步。在「ISAPI 篩選器」標簽頁中添加一個新的 ISAPI 篩選器。「篩選器名稱」設為 PHP,「可執行文件」設為 php4isapi.dll/php5isapi.dll 的路徑。
*
選擇「主目錄」,「虛擬目錄」或「目錄」標簽頁,然後進行:
*
將執行許可權改為「純腳本」
*
點「配置」按鈕,選擇「映射」標簽頁。點擊「添加」按鈕,將「可執行文件」指向適當的 ISAPI DLL。例如 PHP 5 的值可能是:C:\php\php5isapi.dll。在「擴展名」中填入 .php。選擇「全部動作」(或者「限制為」留空),選中「腳本引擎」。然後點擊「確定」。
*
完全停止 IIS(NET STOP iisadmin)
*
重新啟動 IIS(NET START w3svc)
對於 IIS 6(2003 Server),打開 IIS 管理器,進入 web 服務擴展,點擊「添加一個新的 web 服務擴展」,「擴展名」中輸入名稱,例如 PHP,再點擊「添加」按鈕,點擊「瀏覽」選擇要麼 ISAPI 文件(php4isapi.dll 或 php5isapi.dll)或者 CGI 文件(php.exe 或 php-cgi.exe)作為「文件路徑」後點「確定」,然後選中「設置擴展狀態為允許」並點「確定」。
要使用 index.php 作為默認文檔,在「文檔」標簽頁中選擇「添加」。輸入 index.php 並點「確定」。用上下箭頭按鈕調整順序。這和在 Apache 中設定 DirectoryIndex 相似。
對於每個要關聯為 PHP 腳本的後綴都要重復以上步驟。.php 是最常用的,此外為兼容一些遺留下來的老程序可能還需要加上 .php3。
如果過些時候之後碰到 CPU 佔用率達到 100%,則取消選中「緩存 ISAPI 應用程序」(「主目錄」下點「配置」按鈕」)。
1 怎樣將 PHP 目錄加入到 Windows 路徑 PATH 中去?
在 Windows NT,2000,XP 和 2003 下:
*
進入控制面板並打開「系統」圖標(開始 -> 設置 -> 控制面板 -> 系統,Windows XP/2003 中是:開始 -> 控制面板 -> 系統)
*
選擇「高級」標簽頁
*
點擊「環境變數」按鈕
*
在「系統變數」欄中
*
找到 Path 這一項(可能需要向下滾動才能找到)
*
滑鼠雙擊 Path 這一項
*
在最後加入你的 PHP 目錄,包括前面的「;」(例如:;C:\php)此處好像是ext的目錄
*
點擊「確定」並重新啟動電腦
注意: 記住在上述修改之後重新啟動,以確保對 PATH 的改變生效。
PHP 手冊過去提倡把文件拷貝到 Windows 系統目錄中去,這是因為該目錄(C:\Windows,C:\WINNT,等等)默認就在系統路徑中。但是把文件拷貝到 Windows 系統目錄中這一方式早已不被提倡,還可能造成問題。
2 怎樣使 php.ini 文件在 Windows 下被 PHP 所用?
有幾種方法。如果使用 Apache,閱讀專門的安裝指示(Apache 1,Apache 2),否則就必須設定 PHPRC 環境變數:
在 Windows NT,2000,XP 和 2003 種:
*
進入控制面板並打開「系統」圖標(開始 -> 設置 -> 控制面板 -> 系統,Windows XP/2003 中是:開始 -> 控制面板 -> 系統)
*
選擇「高級」標簽頁
*
點擊「環境變數」按鈕
*
在「系統變數」欄中
*
點擊「新建」按鈕並在「變數名」中輸入「PHPRC」,在「變數值」中輸入 php.ini 文件所在的目錄(例如:C:\php)
*
點擊「確定」並重新啟動電腦
D. PHP獲取客戶端狀態碼返回200或404
今天做了個程序,需要取得HTTP狀態碼,於是繼續搜索無力,果然中文資源非常少,於是去查了PHP的手冊。
找到了curl這個小工具。
使用curl需要在php.ini中設置啟用才行 >< Windows的伺服器中,打開php.ini,找到:
extension=php_curl.dll
去掉前面的注釋既可 。
實現代碼如下:
$curl = curl_init();
$url=』http://www.smdcn.net』;
curl_setopt($curl, CURLOPT_URL, $url); //設置URL
curl_setopt($curl, CURLOPT_HEADER, 1); //獲取Header
curl_setopt($curl,CURLOPT_NOBODY,true); //Body就不要了吧,我們只是需要Head
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //數據存到成字元串吧,別給我直接輸出到屏幕了
$data = curl_exec($curl); //開始執行啦~
echo curl_getinfo($curl,CURLINFO_HTTP_CODE); //我知道HTTPSTAT碼哦~
curl_close($curl); //用完記得關掉他
完成~~