PHP安全配置詳解
毫無疑問,PHP是一種非常強大的服務(wù)器端腳本語言,但是強大的功能總是伴隨著重大的危險。在本章中,您將學(xué)習(xí)使用PHP 的安全模式來預(yù)防PHP 的一些潛在危險。 【 安全模式 】
PHP 的安全模式在存在多個用戶帳戶的PHP 開放Web 服務(wù)器上提供了一個基本安全的共享環(huán)境。當(dāng)Web 服務(wù)器以安全模式運行PHP 時,某些功能會被完全禁用,某些功能會受到限制。 [ 使用安全模式來強制限制 ]
在安全模式下,一些試圖訪問文件系統(tǒng)的功能將被限制。運行web服務(wù)器用戶ID,如果要對某個文件進行操作,必須有讀寫該文件的訪問權(quán)限。 PHP實現(xiàn)這個限制功能是沒有問題的。
開啟安全模式后,當(dāng)試圖讀寫本地文件時,PHP會檢查當(dāng)前訪問用戶是否為目標(biāo)文件的所有者。如果不是所有者,則禁止操作。 (寫權(quán)限:在較低級別的文件訪問權(quán)限下,可能允許讀取或?qū)懭胂到y(tǒng)操作系統(tǒng)的文件,通過PHP的安全模式實現(xiàn)防止你操作其他用戶文件的操作。當(dāng)然,a Web 服務(wù)器可能可以訪問具有全局寫權(quán)限的任意文件。) 當(dāng)安全模式打開的時候,以下函數(shù)列表的功能將會受到限制:
chdir, move_uploaded_file, chgrp, parse_ini_file, chown, rmdir, copy, rename, fopen, require, highlight_file, show_source, include, symlink, link, touch, mkdir, 取消鏈接
同樣,某些PHP 擴展中的函數(shù)也會受到影響。 (加載模塊:dl功能在安全模式下會被禁止,如果要加載擴展,只能修改php.ini中的擴展選項,PHP啟動時加載)
開啟PHP安全模式后,需要執(zhí)行操作系統(tǒng)程序時,必須是safe_mode_exec_dir選項指定目錄下的程序,否則會執(zhí)行失敗。即使允許執(zhí)行,也會自動傳遞給escapeshellcmd函數(shù)進行過濾。
以下執(zhí)行命令的函數(shù)列表將受到影響:
exec, shell_exec, passthru, 系統(tǒng), popen
此外,后退標(biāo)記運算符(`) 也將被關(guān)閉。
在安全模式下運行時,putenv 函數(shù)將不起作用,但不會導(dǎo)致錯誤。同樣,其他一些試圖改變PHP環(huán)境變量的函數(shù)set_time_limit、set_include_path也會被忽略。 [ 打開安全模式 ]
開啟或關(guān)閉PHP的安全模式是使用php.ini中的safe_mode選項。如果要為所有當(dāng)前共享Web 服務(wù)器用戶激活安全模式,只需將配置選項設(shè)置為: safe_mode=On 當(dāng)函數(shù)訪問文件系統(tǒng)時,將執(zhí)行文件所有者檢查。默認情況下,當(dāng)您可以更改由safe_mode_gid 選項指定的文件所有者的組ID (GID) 時,會檢查文件所有者的用戶ID。如果你的系統(tǒng)上有共享庫文件,當(dāng)你遇到需要include或者require的時候,那么你可以使用safe_mode_include_dir選項來設(shè)置你的路徑,以保證你的代碼正常工作。 (包含路徑:如果想使用safe_mode_include_dir選項來包含更多的包含路徑,那么可以使用和include_path選項相同的選項,在Unix/Linux系統(tǒng)下用冒號隔開,在Windows下用分號隔開)例如,如果你想在安全模式下包含/usr/local/include/php 下的文件,那么你可以設(shè)置選項:選項。比如你需要/usr/local/php-bin路徑下的文件可執(zhí)行,那么你可以設(shè)置選項為:safe_mode_exec_dir=/usr/local/php-bin(可執(zhí)行:如果你執(zhí)行的程序是在/usr/bin 目錄下,然后你可以將這些二進制文件連接到你指定的選項下可以執(zhí)行的路徑)如果你想設(shè)置一些環(huán)境變量,你可以使用safe_mode_allowed_env_vars 選項。該選項的值是環(huán)境變量的前綴。默認是允許以PHP_ 開頭的環(huán)境變量。如果你想改變它,你可以設(shè)置這個選項的值。使用逗號分隔多個環(huán)境變量前綴。比如下面允許時區(qū)的環(huán)境變量TZ,那么修改這個選項的值:safe_mode
_allowed_env_vars = PHP_,TZ【 其他的安全特征 】除了安全模式以外,PHP還提供了許多其他許多特征來保證PHP的安全。[ 隱藏PHP ]
你能夠在php.ini里使用 expose_php 選項來防止Web服務(wù)器泄露PHP的報告信息。如下:expose_php = On利用整個設(shè)置,你能夠阻礙一些來自自動腳本針對Web服務(wù)器的攻擊。通常情況下,HTTP的頭信息里面包含了如下信息:Server: Apache/1.3.33 (Unix) PHP/5.0.3 mod_ssl/2.8.16
OpenSSL/0.9.7c在 expose_php 選項打開以后,PHP的版本信息將不包含在上面的頭信息里。當(dāng)然,用戶訪問網(wǎng)站的時候同樣能夠看到 .php 的文件擴展名。如果你想整個的使用不同的文件擴展名,你需要在 httpd.conf 中找到如下這行:AddType application/x-httpd .php你就可以修改 .php 為任何你喜歡的文件擴展名。你能夠指定任意多個的文件擴展名,中間使用空格進行分割。如果你想在服務(wù)器端使用PHP來解析 .html 和 .htm 文件的時候,那么你設(shè)置選項如下:AddType application/x-httpd .html .htm(解析HTML:配置你的Web服務(wù)器使用PHP去解析所有的HTML文件,但是如果非服務(wù)器端代碼也需要PHP去解析,會影響服務(wù)器的性能。靜態(tài)頁面你可以使用不同的擴展名,這樣能夠消除對PHP腳本引擎的依賴,增強性能。)
[ 文件系統(tǒng)安全 ]
安全模式限制了腳本所有者只能訪問屬于自己的文件,但是你可以使用 open_basedir 選現(xiàn)來指定一個你必須訪問的目錄。如果你指定了一個目錄,PHP將拒絕訪問除了該目錄和該目錄子目錄的其他目錄。open_basedir 選項能夠工作在安全模式之外。限制文件系統(tǒng)只能訪問 /tmp 目錄,那么設(shè)置選項為:open_basedir = /tmp[ 函數(shù)訪問控制 ]你能夠在 disable_functions 選項中使用逗號分割來設(shè)定函數(shù)名,那么這些函數(shù)將在PHP腳本中被關(guān)閉。這個設(shè)置能夠工作在安全模式之外。disable_functions = dl當(dāng)然,同樣的你能夠使用 disable_classes 選項來關(guān)閉對一些類的訪問。
標(biāo)簽:北京網(wǎng)站制作 高端網(wǎng)站建設(shè)
我們專注高端建站,小程序開發(fā)、軟件系統(tǒng)定制開發(fā)、BUG修復(fù)、物聯(lián)網(wǎng)開發(fā)、各類API接口對接開發(fā)等。十余年開發(fā)經(jīng)驗,每一個項目承諾做到滿意為止,多一次對比,一定讓您多一份收獲!