PHP是一種跨平台的服務器端的嵌入式腳本語言
它大量地借用C
Java和Perl語言的語法
並耦合PHP自己的特性
使WEB開發者能夠快速地寫出動態產生頁面
最新版本PHP
支持目前絕大多數數據庫(Mysql
PostgreSQL
Oracle
DB
Sybase等)
還有一點
PHP是完全免費的
不用花錢
你可以從PHP官方站點)自由下載
PHP拓展了WEB Server的功能
實現了Web最佳服務的後端延展界面
見圖-
圖- PHP拓展了WEB Server的功能 PHP全稱Professional HyperText PreProcessor
以最新的PHP
為例支持它的WEB服務器有
Apache
Microsoft Internet information Sereve
Microsoft Personal web Server
AOL server
Netscape Enterprise 等等
PHP是一種功能強大的語言和解釋器
無論是作為模塊方式包含到web服務器裡安裝的還是作為單獨的CGI程序程序安裝的
都能訪問文件
執行命令或者在服務器上打開鏈接
而這些特性都使得PHP運行時帶來安全問題
雖然PH P是特意設計成一種比用Perl或C語言所編寫的CGI程序要安全的語言
但正確使用編譯時和運行中的一些配置選項以及恰當的應用編碼將會保證其運行的安全性
由於我們可以在很多不同的方面利用 PHP
因此它有很多設置選項來控制其行為
一組龐大的可選參數能夠保證您可以將 PHP 用於許多不同的目的
但這同時也意味著這些參數和服務端配置的組合會帶來一些安全問題
PHP 的配置與其代碼相比
有著同樣的靈活性
PHP 可以用來建立完整的服務端應用程序
擁有所有外殼用戶的權限
它也可以在被嚴格控制的環境下用作一個簡單的服務端包含
僅承擔很小的風險
您如何建立該環境
以及其安全性如何
在很大程度上取決於 PHP 的開發者
注
本文所有操作在Red Hat Linux
下完成
一 安全從頭開始 在編譯PHP之前
首先確保操作系統的版本是最新的
必要的補丁程序必須安裝過
安裝編譯PHP過程中要注意的
個問題
使用Apachetoolbox整合Apache
PHP
Mysql 目前最好的web建站黃金組合是Linux+Apache+Mysql+PHP
但是在實際工作過程中需要分別下載
安裝
配置apache
php和mysql
並且需要根據具體情況修改apache的
php的php
ini還有mysql的配置文件
如果你還需要提供ssl功能
那還得下載正確的ssl apache模塊
並定制它的
ini文件等
其中的任何步驟出現問題都會導致網站不能正確運行
想一次完全配置成功
即使對於一個經驗豐富的Linux網絡管理員也比較困難
Apache Toolbox是用shell腳本寫成的
Apache Toolbox可以很很方便的使你定制你的apache按您的要求在Apache支持的
個第三方的軟件包以及
個模塊中選擇
定制的過程完全用菜單驅動
而且都有簡單的說明
所有的組件都是用源代碼方式安裝
在安裝過程中
如果發現RPM包有問題
它還會用wget去重新下載新的可用的組件包
相信對那些網絡管理員是一個有用的工具
Apache Toolbox 可以在GUN命令行下安裝
也可以在X窗口下安裝
為了方便讀者閱讀本文以在X窗口下安裝為例
在w下載最新的apachetoolbox安裝包
包括apache
mysql
php
Python
PostgresSQLv
等常用建站軟件和APC (一種為PHP提供Cache的模塊)
Apache Toolbox Apache Toolbox提供了一個簡單的編譯Apache方法
能讓你很容易地安裝Apache
SSL
PHP
ZendOptimizer
mod_auth
nds
mod
dynvhost
WebDAV
mod_fastcgi
mod_gzip
mod_layout
mod_throttle
mod_accessref
mod_auth_sys
mod_bandwidth
mod_auth_ldap
mod_perl
openldap
等等以及最新的支持PNG格式的 gd 庫
它支持完全的菜單界面
圖- Apachetoolbox安裝界面 按照Apache 模塊安裝當 PHP 被用作 Apache 的模塊時
它將繼承 Apache 的用戶權限(典型情況為用戶
nobody
)
這將對安全及授權機制產生一些沖擊
例如
如果您使用 PHP 來訪問數據庫
除非數據庫本身有內建的訪問控制
否則您將使得數據庫能夠被用戶
nobody
訪問
這意味著惡意的腳本能夠訪問並修改數據庫
甚至不需要用戶名和密碼
網絡黑客無意中訪問到了數據庫管理員的 WEB 頁面並通過這裡刪除所有的數據庫是完全有可能發生的
您可以利用 Apache 的認證機制來防止這些的發生
或者也可以利用 LDAP 或
htaccess 文件等來設計您自己的訪問模式
並將這些代碼包含為您 PHP 腳本的一部分
通常
一旦安全機制建立並使得 PHP 的用於(在這種情況下
為 Apache 用戶)僅為此承擔很小的風險時
我們發現 PHP 此時被禁止往用戶目錄寫入任何文件
或者還有可能被禁止訪問和更改數據庫
無論往防止的對象中寫入文件的好壞以及進入的數據庫事務的好壞
其安全性都是同等的
在這個時候
一個頻繁出現的安全錯誤是給 Apache root 權限
或者用其它方法提升 Apache 的能力
給 Apache 用戶賦予 root 權限是及其危險的
而且有可能會連累整個系統
因此
進行 sudo
chroot
或者以 root 賬號運行等操作不應該考慮讓那些非安全專家來執行
還有一些更簡單的情況
您可以使用 open_basedir 來控制和限制 PHP 能夠使用的目錄
您還可以建立 Apache 的專用區域
以將所有基於 WEB 的活動都限制到非用戶
系統和文件
把PHP解析器放在Web目錄外
一種安全性非常高的方法是把 PHP 解析程序放置到 WEB 文件目錄樹以外的某個地方
例如
放置到 /usr/local/bin
這種做法唯一的弊病就是您現在需要在所有含有 PHP 標記符文件的第一行添加類似於以下的內容
#!/usr/local/bin/php
您需要使得這些文件成為可執行文件
也就是說
像對待任何其它 CGI 腳本一樣來對待它們
這些 CGI 腳本可能是用 Perl
sh 或者任何其它使用的 #! shell
escape 機制來啟動它們自身的腳本語言來編寫的
要使這個方法中 PHP 能夠正確處理 PATH_INFO 和 PATH_TRANSLATED 信息
在編譯 PHP 解析器時必須使用配置參數
enable
discard
path
下面是一個能作為CGI程序運行的PHP腳的例子
#!/usr/local/bin/phpecho
This is a my small program
最後將PHP請升級為最新穩定版本
在PHP
中
添加了一組特殊數據以訪問外部數據
這些數組可以在任何范圍內調用
這使得外部數據的訪問更方便
在PHP
中
register_globals被默認關閉以鼓勵使用這些數組以避免無經驗的開發者編寫出不安全的PHP代碼
作出這樣的變化是出於安全性的考慮的
鏈接/downloads
php
二 安全使用PHP 安裝安全模塊
PHP 的安全模式是為了試圖解決共享服務器(shared
server)安全問題而設立的
在結構上
試圖在 PHP 層上解決這個問題是不合理的
但修改 WEB 服務器層和操作系統層顯得非常不現實
因此許多人
特別是 ISP
目前使用安全模式
表
安全模式配置指令
以下是該配置選項的簡要解釋
(
)safe_mode boolean
是否啟用 PHP 的安全模式
(
)safe_mode_gid
默認情況下
安全模式在打開文件時會做 UID 比較檢查
如果你想將其放寬到 GID 比較
則打開 safe_mode_gid
是否在文件訪問時使用 UID(FALSE)或者 GID(TRUE)來做檢查
(
)safe_mode_include_dir
當從此目錄及其子目錄(目錄必須在 include_path 中或者用完整路徑來包含)包含文件時越過 UID/GID 檢查
從 PHP
開始
本指令可以接受和 include_path 指令類似的風格用分號隔開的路徑
而不只是一個目錄
(
)safe_mode_exec_dir
如果 PHP 使用了安全模式
system() 和其它執行系統程序的函數將拒絕啟動不在此目錄中的程序
(
)safe_mode_allowed_env_vars
設置某些環境變量可能是潛在的安全缺口
本指令包含有一個逗號分隔的前綴列表
在安全模式下
用戶只能改變那些名字具有在這裡提供的前綴的環境變量
默認情況下
用戶只能設置以 PHP_ 開頭的環境變量(例如 PHP_FOO = BAR)
(
)safe_mode_protected_env_vars
本指令包含有一個逗號分隔的環境變量的列表
最終用戶不能用 putenv() 來改變這些環境變量
甚至在 safe_mode_allowed_env_vars 中設置了允許修改時也不能改變這些變量
(
)disable_functions
本指令允許你基於安全原因禁止某些函數
接受逗號分隔的函數名列表作為參數
disable_functions 不受安全模式的影響
本指令只能設置在 php
ini 中
例如你不能將其設置在
(
)disable_classes
本指令可以使你出於安全的理由禁用某些類
用逗號分隔類名
disable_classes 不受安全模式的影響
本指令只能設置在 php
ini 中
例如你不能將其設置在
該指令自 PHP
起可用
(
)open_basedir
將 PHP 所能打開的文件限制在指定的目錄樹
包括文件本身
本指令不受安全模式打開或者關閉的影響
以安全模式運行PHP
From:http://tw.wingwit.com/Article/program/PHP/201311/20784.html