Linux԰̳'s Archiver

chengkinhung 2007-12-23 12:22

LinuxµApachePHPȫüҪ

˵: LAMPϵͳ԰ȫ͸Ч,ȱʡİװȻвȨùڿ,
ϵͳڰȫ, Ƕṩ֧PHPܵռ÷ϵͳ,һҪ
ǿصİȫ.

ԭǹеıʼ,ҪRedHat Linux汾ص,ܵѡ
ǴGoogleѰ,ҵľĵ,CentOS4.4еͨ. xȤ,
οʹ; иøȫļ,Ҳӭߴͽ([email]chengkinhung@gmail.com[/email]);

PHPȫõIJο: (WStefan EsserԭtesoԱ,Ŀǰphpȫţ֮һ)
[url]http://www.hardened-php.net/hardening_patch.14.html[/url]


################################################################################
Ոע: ѡֻ漰ļ: php.inihttpd.conf;

Wַ: [url]http://us2.php.net/configuration.changes[/url]

ṩWjյISP,ڰȫ,hapachephpʹС޵Ĺ.
ᘌضÑ漰ȫܵҪ, ڲıȫԵĹõr,
ͨ^Apache VirtualhostPHPչ܁팍F. ֻÑVirtualhostO
вphp_value,php_admin_valuephp_admin_flagָ,ͿʹԓÑcȫ
Oòͬę޺О.

ᘌApacheض̓MÑMІΪõ﷨:

php_admin_value name 1|0|string                (valueƾIJ)
php_admin_flag name on|off                (flagonoff,mApache2.20汾)

Ոע: ᘌ̓MÑO,ֱO<VirtualHost>Ԫ,O
Ñ<Directory>Ԫ.

,Ҫernestûregister_globalsܴ,ҽupload_max_filesizeߵ
5M,ͬrP]safe_mode,ֲӰû,ͿڸûVirtualHostŽ:

<VirtualHost 222.222.222.222>
        php_value upload_max_filesize 5M
        php_value register_globals 1

        php_value safe_mode 0
        php_flag safe_mode Off

        php_admin_value safe_mode 0        #(for Apache2.20)
        php_admin_flag safe_mode Off         #(for Apache2.20)
</VirtualHost>

php.iniļеĴ󲿷ֹ,ַʽ,Ӧapache,Ȼ
ͿphpinfoпмLocal ValueͬұλMaster ValueDzֵͬ.

Ոע: Щֵ趨php.iniļе÷ܲһ,
"register_globals 1", ԭphp.iniӦ"register_globals On".
################################################################################


================================================================================
(1) safe_mode: ԰ȫģʽPHP;
--------------------------------------------------------------------------------
php.iniļʹx(@ӰȫֵO):
safe_mode = On                (ʹðȫģʽ)
safe_mode = Off                (رհȫģʽ)

PHPİȫģʽǞԇDQŷ(shared-server)İȫ}TO. Ȼ
ĽYϿ, ԇDPHPϽQ@}䌍Dz, ֻǿ]޸WEBŷ
ͲϵyӶ@÷dzIJF, Sʹ,؄eṩWjյISP,
඼Ҫ԰ȫģʽPHP,ԷֹϷÑĿվxȡԽ
ΣUО, ԼڙÑĐОɵӰ푽ͷ.

Wַ: [url]http://hk2.php.net/features.safe-mode[/url]

Apachehttpd.confVirtualHostӦ÷(@ᘌضÑO):
php_admin_flag safe_mode On        (ʹðȫģʽ)
php_admin_flag safe_mode Off        (رհȫģʽ)
ߣ
php_admin_value safe_mode 1        (ʹðȫģʽ)
php_admin_value safe_mode 0        (رհȫģʽ)

ؾ: ȫOѽsafe_modeĹ,؄eÑ̓Mg
P]ԓÑsafe_modeĹ,@͵ڽoԓÑę,Ssafe_mode
ƶɵʹϵyķ,ҲfԭȫԵsafe_modeֹО,
վxȡԽȶԱԓÑ, @ͺԭȫOĽд_
һɹԓÑMĶ,κʹԓÑgđöٱȫԵsafe_mode
o,Ȼ@ζϵyİȫԶܕܵԓÑgӰ,
ԓgõ©ϵyֵȵ. ,@ӵᘌضÑO,
һNSڙķʽ], бҪЧıOؙCԷֹԓÑEϵyYԴ,
t, һԓÑ׃òٿλľWվ©, ôwϵyܵӰ
͕ͬȫ]Іsafe_modeһģһ.
================================================================================


================================================================================
(2) safe_mode_include_dir: UID/GIDĿ¼
--------------------------------------------------------------------------------
ǰ(1)֮OÆPHPİȫģʽ֮,PHP_\Еr͕б
ĿԼļMᘌUID/GIDƥԙz: z鱻Ŀ䛻ļUIDGID,Ƿ
ͬǰPHP_ļUIDGIDһ.

Ȼ, ϵySÑPHP_L·Ԓ(ܶ^fForumGallery
򶼕ֱϵyļUչrPHP߀δֵ֧Ĺ), ô@NOþ͕韩.

ʹsafe_mode_include_dirOÿָijЩĿ, PHP_@ЩĿ¼Ŀ¼
r(ԓĿ¼include_pathл·), tSԽUID/GID,
ԓĿMUID/GIDƥԙz.

PHP4.2.0ʼ, @ָѽԽͬinclude_pathָƵķ, ÷ֺŸ
·, ǰtָֻһĿ¼. ͬopen_basedirһ, ָ·ʵҲ
һַǰ׺,ᘌԓĿ¼QgIJ.

ָ: safe_mode_include_dir = /dir/incl, ôеPHP_
/dir/include͡/dir/incls ·(ǴڵԒ). , ϣ
һָĿ¼, ͱOõָ·Ľβһб, :
safe_mode_include_dir = /dir/incl/

Ոע: VirtualHostԶ̳php.iniеsafe_mode_include_dir.
================================================================================


================================================================================
(3) open_basedir: ûɲļijĿ¼;
--------------------------------------------------------------------------------
php.iniеԭfԼĬJ:
; open_basedir, if set, limits all file operations to the defined directory
; and below.  This directive makes most sense if used in a per-directory or
; per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
open_basedir = .

open_basedirɽûļĻΧָͨĿ¼·Ҳ
÷"."ǰĿ¼עopen_basedirָʵǰ׺,Ŀ¼
˵: "open_basedir = /dir/user", ôĿ¼ "/dir/user" "/dir/user1"
ԷʵġҪڽΪָĿ¼б߽·ó:
"open_basedir = /dir/user/"

open_basedirҲͬʱöĿ¼, Windows÷ֺŷָĿ¼,κϵͳ
ðŷָĿ¼ApacheģʱĿ¼еopen_basedir·Զ̳С

ַApacheΪָû:

(a) Apachehttpd.confDirectoryӦ÷:
<Directory /usr/local/apache/htdocs>
     php_admin_value open_basedir /usr/local/apache/htdocs/
#öĿ¼Բο:
     php_admin_value open_basedir /usr/local/apache/htdocs/:/tmp/
</Directory>

(b) Apachehttpd.confVirtualHostӦ÷:
php_admin_value open_basedir /usr/local/apache/htdocs/
#öĿ¼Բο:
php_admin_value open_basedir /var/www/html/:/var/tmp/

(c) ΪVirtualHostOopen_basedir֮, @̓MÑͲԶ̳php.ini
еopen_basedirOֵ,Դﵽôʩ, ԽҪVirtualHost
ô. ,php.iniopen_basedir = .:/tmp/, @Oñʾ
ʵǰĿ¼(PHP_ļ֮Ŀ)/tmp/Ŀ¼.

ע: php.iniOõϴļʱĿ䛞/tmp/, ôopen_basedirrͱ
/tmp/,tςʧ. °phptʾ"open_basedir restriction in effect"
Ϣ, move_uploaded_file()ȻԳɹȡ/tmp/Ŀ¼µϴļ,֪
©¹.
================================================================================

[[i] chengkinhung 2007-12-23 23:58 ༭ [/i]]

chengkinhung 2007-12-23 12:24

================================================================================
(4) disable_functions: ΪijЩʽ(ڽֹͨûִϵͳ);
--------------------------------------------------------------------------------
@ָS춰ȫԭֱӽֹijЩȷĺʽ(ͨPϵyȫĺ),:
disable_functions = shell_exec,system,exec,passthru,show_source,get_cfg_var

disable_functionsָ̖ܶĺʽб酢, ܰȫģʽӰ,ֻ
Ophp.iniȫ, ܌Ohttpd.confᘌΪÑMO.

php-4.0.1ʼphp.ini˴, ܷdz, ֹÑʹ
һЩНڵΣԵĺ, : passthru,exec,system,popen ȵ. php.ini
м disable_functions = passthru,exec,system,popen ú,  PHPִЩ
ʱֻ@ʾe`ʾ: Warning: system() has been disabled for security reasons

eӁ@ȫOõҪ̶:

҂֪PHP_Բúܶperl,ͨһֽshell_execķִϵͳ
, ֻһ̖(``)а{ϵyscripta, ܈ϵy.
:

<?
  $output = `ls /etc -al`;
  echo $output;
?>

@Ȼ,ϵyƵԒ,ôκÑͨ^T `cat /etc/passwd` @ӵ
ȡϵyϢMƉО. @ṩյISṔf, Ǵ_Լ
T׌п͑ɳ, һijЩ͑PHPڰȫ©(ĿǰPHPT
ƽˮʁ,ڇص©Dzɱ)Ԓ,  ôֻͼĺڿͶ
ܺεȫٿC.  һҪֹLinuxûPHPͨ``ִscript
ű,@ͨ^PHP.INI: disable_functions = shell_exec,system,exec ֹ
PHP{Pϵy.

͵İȫ,ՈO:
disable_functions = shell_exec,system,exec,passthru,show_source,get_cfg_var

ûԳ,:
disable_functions = shell_exec,system,exec,passthru

PHPһЩõаȫյĺ:
unlink,mkdir,touch,fgets,popen,proc_open,link,symlink,phpinfo
h: Ӧ˵ҵԺͰȫ,鿼Ƿֹʹ.

Ոע: disable_functionsx헲php.iniļⲿʹ,Ҳfohttpd.conf
ļаͬ̓MCͬĿ䛵ķʽλ߿ʽ
================================================================================


================================================================================
5) register_globals: ֹעȫֱ;
--------------------------------------------------------------------------------
register_globals = On        (ԶעΪȫֱ)
register_globals = Off        (עΪȫֱ)

һr,ÑHTMLWͨ^HTTPfh,ύGET,POSTCOOKIE(QGPC)
. PHPΫ@Ñύ@Щ׃,t߀هphp.iniһРh
O,register_globalsQ.

˼,register_globals˼עΪȫֱ, ԮOÞOnʱ, ͨ^
ݹֵͻᱻֱӵעΪȫֱ,ԺܷṩoPHPֱʹ;O
Offʱ,PHPҪʹþW퓂f^׃,Ҫضܵõ.

PHP4.3.0Ժ,register_globalsĬ±ΪOff; Ǽǰ,register_globals
Ĭֵ߀Ǵ򿪵,ԬFȻ߀ںܶҪij.

Ոע: OÞ register_globals = Off ֮,HӰ푵PHPΫ@ȡ<form>URL
f^Ĕ,ҲӰ쵽PHP@ȡsessioncookieķʽ. P]register_globalsr,
PHPͱʹĔM@ȡsessioncookie($_SESSION[]$_COOKIE). ͬr
session̎ҲһЩ׃,ʹsession_register()@ҲûбҪ,
ʧЧ(ھı仯鿴PHPփ퓵Session handling functionsęn֮).

register_globalsoȫLU,ΪûȷӦóȫ
Ѷ. Ϊһregister_globals,ôȫƿռ$_GET,$_POST$_COOKIE
,ԄӴGET,POSTCOOKIEݵPHPűб. PHP
Щȫʶ(ܶTϲgCOOKIEֵû),ôκ˶
ͨURLݵֵȡðû,ȻͲپ߱ȫ.

,һЩ֦~]؟ĵijTPHP, : <? include($value); ?>,
Ҳܿ׌ڿͻʹЙCɳ,ʹregister_globalscMT
aעȴλȷʽĹ,Ķp׵ϵͳԵ.

Ҫʾ: PHP4.2.0,PHPеѡregister_globalsĬֵΪoff,PHP
ҲҪѡ,,superglobals

Apachehttpd.confVirtualHostӦ÷:
php_admin_flag register_globals on
ߣ
php_admin_value register_globals 1
================================================================================


================================================================================
6) magic_quotes_gpc: Ԫת
--------------------------------------------------------------------------------
magic_quotes_gpc = On
magic_quotes_gpc = Off

magic_quotes_gpcѡphpеһҪİȫ, ѡΪON, ҲǴ򿪵ʱ,
дGET,POST,COOKIEݹ֮еԪ('"\),ԼNULLԪַ
Զļ\ʵת,ѡʹSQLע߲,ԼXSSַ
ı̱øѡ

php.iniļĬJmagic_quotes_gpcO(On),@ஔԄӌύ
GET,POST,COOKIEʹaddslashes(). WվgP] magic_quotes_gpc
O, ôPHPͲԪǰϷб(\), SύăݺԪ,
̖(')ȵ, ͸׌ڿͻߐʹЙCSQLע©lӹ.
ȻFںܶ߂䰲ȫRijT򔵓TηSQLע빥,ͨ
ijaíhмӏȫ, ǟoՓ, ϵyӼӏȫ,
ʼKԓLINUXϵyTIJ؟.

Ոע: PHPйԪĴ,addslashes()ԄԪǰ
б, Ҳústripslashes()ȥб. , ݿⱾҲṩᘌ
ݵĴ. PHP汾MySQL, һ{Ô̎
ݔ딵ĺ: mysql_real_escape_string(); ɽַԼݿ
ַת.

Apachehttpd.confVirtualHostӦ÷:
php_admin_flag magic_quotes_gpc on
ߣ
php_admin_value magic_quotes_gpc 1
================================================================================

chengkinhung 2007-12-23 12:25

================================================================================
7) allow_url_fopenallow_url_include: ֹȡԶļ
--------------------------------------------------------------------------------
allow_url_fopen = On                (URLļ,AO)
allow_url_fopen = Off                (ֹURLļ)
allow_url_include = Off                (ֹURLļ,°ӹ,AOP])
allow_url_include = On                (URLļ,°ӹ)

allow_url_fopen @x헆URLʽfopenbfh, ʹPHPBURL
(hļ). AķbfhṩftphttpfhBhļ,һЩUչ
zlibܕ]Ըķbfh. allow_url_includeAӋһPHP汾ҪṩĹ,
Áxfopenincludeh{,FPHP5.20ѽṩ@x.

ܷf,PHPṩķh{ô_˺ܶ, ǏİȫǶȁ,
S(Include)URLhYԴ,ʹPHPó©׃øױ, @N
ܶలȫоˆTҕһN©(Remote URL Include vulnerabilities), ˳
hphp.iniнֹʹ.

PHP_lӋPHP6汾ṩallow_url_include,F@ѽPHP5.20
Б. ֹallow_url_includeQh(Include)Ć}, ͬr׌҂߀
һʹfopenȥ_h˵ęn, ٠Bϴ_includeLU.
°PHPallow_url_fopenxAOǴ_,allow_url_includetAOP].

ȻŒϵyǶȁ,ʹֹPHPallow_url_fopenallow_url_include,
䌍Ҳȫֹh{üİȫ[n,ֻDZo˘ӛURLľ,
ҲfֻӰhttp(s)ftp(s){, ӛh{,猦PHP5.2.0
°ṩphpdatatoܞ,@Щ{һӕעLU,Ո´a:

<?php  // Insecure Include
  // The following Include statement will
  // include and execute everything POSTed
  // to the server

  include "php://input";
?>

<?php // Insecure Include
  // The following Include statement will
  // include and execute the base64 encoded
  // payload. Here this is just phpinfo()

  include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
?>

aԾWj,Ո¾Wַ:
[url]http://blog.php-security.org/archives/45-PHP-5.2.0-and-allow_url_include.html[/url]

ȻLINUXϵyӼ,߀ЄekÁֹh{, ʹIPTABLESȷ
߁oϵy,PHPóҲԿ]curlxȡhļ.

Ոע: ֻPHP4.0.3֮İ汾вſphp.iniļʹallow_url_fopenx,
PHP4.0.3Լ֮ǰİ汾, tֻھgrͨ^ --disable-url-fopen-wrapper
ȡ. WindowsµPHP4.3汾֮ǰ,Pʽ: include, include_once, require,
require_once ֧ԮhļB,PHP4.3汾֮ſ׌@ʽhxȡ.

Apachehttpd.confVirtualHostӦ÷:
php_admin_flag allow_url_fopen Off
php_admin_flag allow_url_include Off
ߣ
php_admin_value allow_url_fopen 0
php_admin_value allow_url_include 0
================================================================================


================================================================================
8) Error handling and logging: ƺ־
--------------------------------------------------------------------------------
display_errors = On        (򿪴ʾ)
display_errors = Off        (رմʾ)

PHPȱʡǴ_e`Ϣ@ʾ,Ğر֮, ôPHPЕr,e`Ϣ
@ʾoÑ,@һ̶Ϸֹߏe`Ϣ֪_λ,Լ
һЩõϢ,aoߵĺzyһϵK.

PHPe`Ϣ҂Լ,Ҳóɰ־ļȥ,:
log_errors = Off        (PHP Ĭǹرմ־)
log_errors = On                (޸Ϊ򿪲¼־)

־¼,߀Ҫָ־ļ,PHP¼Ǹļȥ:
;error_log = filename        (Ĭϱֺ";"עጣ޸Ϊ)
error_log = /var/log/php_error.log
ǰfilenameĞָļ"/var/log/php_error.log", @Ժ,еPHPe`
@־ļeȥ

Apachehttpd.confVirtualHostӦ÷:
php_admin_flag display_errors Off
ߣ
php_admin_value display_errors 0

Ϊ,ÿûVirtualHostָ־ļ:
ErrorLog logs/mydomain.com-error_log
================================================================================


################################################################################
PHPȫ÷:
################################################################################
================================================================================

php.iniİȫ÷:
--------------------------------------------------------------------------------
safe_mode = On
allow_url_fopen = Off
allow_url_include = Off
register_globals = Off
magic_quotes_gpc = On
display_errors = Off

disable_functions = shell_exec,system,exec,passthru,show_source,get_cfg_var
#,ҲԿǿźΣϵϵ͵ĺ:
disable_functions = shell_exec,system,exec,passthru

open_basedir = .
--------------------------------------------------------------------------------

VirtualHostһ÷:
--------------------------------------------------------------------------------
<VirtualHost 222.222.222.222:80>
    ServerAdmin [email]webmaster@mydomain[/email]
    DocumentRoot /home/hosting/mydomain/public_html
    ServerName mydomain.com
    ServerAlias [url]www.mydomain.com[/url]
    php_admin_value safe_mode 1
    php_admin_value allow_url_fopen 0
    php_admin_value allow_url_include 0
    php_admin_value register_globals 1
    php_admin_value magic_quotes_gpc 1
    php_admin_value display_errors 0
    php_admin_value open_basedir /home/hosting/mydomain/
    ErrorLog logs/mydomain.com-error_log
    CustomLog logs/mydomain.com-access_log common
</VirtualHost>

#:

<VirtualHost 222.222.222.222:80>
    ServerAdmin [email]webmaster@mydomain[/email]
    DocumentRoot /home/hosting/hung25ucom/public_html
    ServerName mydomain.com
    ServerAlias [url]www.mydomain.com[/url]
    php_admin_flag safe_mode On
    php_admin_flag allow_url_fopen Off
    php_admin_flag allow_url_include Off
    php_admin_flag register_globals On
    php_admin_flag magic_quotes_gpc On
    php_admin_flag display_errors Off
    php_admin_value open_basedir /home/hosting/mydomain/
    ErrorLog logs/mydomain.com-error_log
    CustomLog logs/mydomain.com-access_log common
</VirtualHost>
--------------------------------------------------------------------------------
================================================================================

[[i] chengkinhung 2008-3-20 00:03 ༭ [/i]]

luren04 2008-4-23 10:28

¥һʱ俴úΡ

menghuixy 2008-4-23 11:07

Ҫ  ֣  

luren04 2008-4-23 13:25

ͬ¥ϵ˵ԼתһҲ

ҳ: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.