Você está na página 1de 14

PHP Seguro

Ernani Azevedo (PROCERGS DPO/SAS Unix)


Reviso 1.2 19 de Ari! de 2""#
1 Introduo
A !in$%a$e& P'P( )or ser &%i*o +!ex,ve!( nor&a!&en*e -
%*i!izada de +or&a inse$%ra( *an*o )e!o desenvo!vedor .%an*o )e!os
ad&inis*radores de servidores de /os)eda$e&.
Exis*e& diversas v%!nerai!idades 0on/e0idas( a s%a $rande
&aioria - de do&,nio )1!i0o( +a0i!&en*e en0on*radas na 2n*erne*.
3%i*os si*es )oss%e& &a*eria! .%e ensina& 0o&o ex)!orar es*as
+a!/as. 4 0o&%& ver&os e& re$is*ros de a0essos a servidores
)1!i0os( .%e %*i!iza& P'P( *en*a*ivas de ex)!orar es*as +a!/as.
Por *a! &o*ivo( es*e do0%&en*o serve 0o&o %& $%ia )ara
desenvo!vedores e ad&inis*radores. O in*%i*o des*e - 0riar %&a
0%!*%ra de desenvo!vo!vi&en*o se$%ro.
Passare&os )e!os )ro!e&as 0on/e0idos en+a*izando a +or&a .%e
os &es&os so 0o&%&en*e %*i!izados( ex)!orados e 0o&o es0rever o
&es&o 05di$o de +or&a si&)!es e se$%ra e a s%a +or&a idea!.
6o*e7se *a&-& .%e es*as re$ras de )ro$ra&a8o no so
%*i!izadas a)enas )ara se$%ran8a( &as )ara 0riar sis*e&as e& P'P
.%e se9a& ex*re&a&en*e )or*:*eis en*re diversas )!a*a+or&as e
di+eren*es es*r%*%ras de servidores( desde o &ais $en-ri0o ao &ais
se$%ro.
1.1 - Convenes utilizadas neste documento
As se$%in*es 0onven8;es so %*i!izadas nes*e do0%&en*o<
=ex*o )!ano
Do0%&en*a8o nor&a!.
=ex*o red%zido
2ndi0a se$&en*os in0o&)!e*os de 05di$os )ara exe&)!o.
Itlico
=er&os e& in$!>s ori$inais se& *rad%8o.
Negrito
?ari:veis.
Negrito Itlico
1
@%n8;es de )ro$ra&a8o.
S%!in/ado
AinBs )ara URACs da 2n*erne*.
2 ulnera!ilidades
As v%!nerai!idades &ais 0o&%ns no P'P so<
Cross7si*e S0ri)*in$D
SEA 2n9e0*ionD
2n0!%so de va!ores e& vari:veis in*ernasD
Ex)osi8o de in+or&a8;es do servidor (&ensa$ens de erro)D
Ex)osi8o de ar.%ivos do sis*e&a e o%*ros do servidorD
Exe0%8o de )ro$ra&as no servidor.
Exis*e& diversas o%*ras re$ras e +%n8;es .%e deve& ser
desai!i*adas e& servidores )ara %&a &aior se$%ran8a. Es*as
0on+i$%ra8;es so +ei*as de +or&a .%e( se o desenvo!vedor %*i!izar
%&a +or&a inse$%ra de )ro$ra&a8o e 0o& isso $erar %&a +a!/a .%e
)ossa ser ex)!orada re&o*a&en*eD no ven/a a a+e*ar o servidor
e/o% o%*ros si*es /os)edados no &es&o( e si&( .%e +i.%e res*ri*o F
:rea do si*e .%e es*: v%!ner:ve!.
2.1 Cross-site Scri"ting
O P'P )oss%i %&a +%n0ionai!idade ex*re&a&en*e 1*i!( .%e - a
de a0ei*ar URACs (endere8os de ):$inas( @=P( e*0)
*rans)aren*e&en*e e& s%as +%n8;es .%e a0essa& ar.%ivos.
Es*a +%n0ionai!idade - 0on/e0ida )or URL Wrapper
1
. E!a deve
ser desai!i*ada( a)esar de ser 1*i! )ara desenvo!vedores
in0!%ire& %&a ):$ina re&o*a +a0i!&en*e.
E%ando es*a +%n8o - %*i!izada de +or&a in0orre*a( /ai!i*a a
)ior das re0/as de se$%ran8a .%e %& 05di$o e& P'P )ode )oss%ir.
E!e )ossii!i*a .%e .%a!.%er %&( re&o*a&en*e( )ossa !er .%ais.%er
ar.%ivos do sis*e&a .%e o )ro0esso do servidor Ge *en/a
)er&isso( a!-& de )oder exe0%*ar .%a!.%er s0ri)* P'P no servidor
onde o 05di$o es*a /os)edado.
3%i*as vezes o desenvo!vedor( o% )or des0on/e0i&en*o des*a
v%!nerai!idade( o% )or )ra*i0idadeD %*i!iza( )or exe&)!o<
1 http://www.php.net/manual/pt_BR/ref.filesystem.php#ini.allow-url-fopen
2
HI)/)
// 2n0!%i o 0ae8a!/o da ):$ina<
in0!%de ( J0ae0a!/o.)/)K)D
// 2n0!%i a ):$ina re.%isi*ada<
in0!%de ( L)a$ina)D
// 2n0!%i o roda)- da ):$ina<
in0!%de ( Jroda)e.)/)K)D
IM
C#digo 1$ %&em"lo de c#digo vulneravel a Cross-site Scri"ting
Ex*erna&en*e( )ode7se ex)!orar es*e 05di$o de diversas
+or&as. U&a de!as( 0o& a o)8o de URL Wrapper /ai!i*ada no
servidor( - )ossive! .%e se9a exe0%*ado 05di$o ex*erno ao servidor
0o&o se +osse !o0a!. Para is*o( as*a a0essar o 05di$o da se$%in*e
+or&a<
/**)<//GGG.se%si*e.0o&.r/0odi$o1.)/)I)a$inaN/**)<//GGG.inse$%ro.0o&.r/0odOex*erno.*x*
2s*o +ar: 0o& .%e o P'P in*er)re*e o 05di$o da se$%in*e +or&a<
1. 2n0!%i o ar.%ivo J0ae0a!/o.)/)KD
2. 2n0!%i o ar.%ivo es)e0i+i0ado e& '"aginaD
P. 2n0!%i o ar.%ivo Jroda)e.)/)KD
E%ando o P'P in*er)re*ar o se$%ndo 0o&ando( e!e vai in0!%ir o
ar.%ivo indi0ado e& '"agina. E%ando o URL Wrapper es*: a*ivo( es*e
ar.%ivo *a&-& )oder: ser %&a URA de %&a ):$ina ex*erna. 6es*e
0aso( o P'P a0essa o servidor re&o*oD re.%isi*a o ar.%ivo e o
)ro0essa 0o&o se +osse 05di$o !o0a! e !e$,*i&o( )ois no exis*e
.%a!.%er veri+i0a8o de a%*en*i0idade nessa *ransa8o.
O%*ra v%!nerai!idade asso0iada a %*i!iza8o des*e 0o&ando
0o&o des0ri*o a0i&a (&es&o 0o& o URL Wrapper desai!i*ado) - a
!ei*%ra de .%a!.%er ar.%ivo .%e o servidor *en/a )er&isso de
!ei*%ra. Por exe&)!o( o ar.%ivo de sen/as de %& servidor Unix )ode
ser !ido da se$%in*e +or&a<
/**)<//GGG.se%si*e.0o&.r/0odi$o1.)/)I)a$inaN../../../../../../e*0/)assGd
Ex)!i0ando< Os dire*5rios re0%rsivos serve& )ara re*ro0eder
ao dire*5rio a*%a!( .%e - onde o P'P )ro0%raria ini0ia!&en*e o
ar.%ivo. Co& is*o( )ode7se !er s0ri)*s do si*e( de o%*ros si*es(
in+or&a8;es in*ernas do servidor( sen/as( e*0.
Es*a v%!nerai!idade )ode ser +a0i!&en*e 0orri$ida %*i!izando
o 0o&ando basename()
2
na vari:ve!( rees0revendo o 05di$o )ara<
2 http://www.php.net/manual/pt_BR/function.basename.php
3
HI)/)
// 2n0!%i o 0ae8a!/o da ):$ina<
in0!%de ( J0ae0a!/o.)/)K)D
// 2n0!%i a ):$ina re.%isi*ada<
in0!%de ( asena&e ( L)a$ina))D
// 2n0!%i o roda)- da ):$ina<
in0!%de ( Jroda)e.)/)K)D
IM
C#digo 2$ %&em"lo de Cross-site Scri"ting seguro utilizando basename()
O 0o&ando basename() re*orna a)enas o no&e do ar.%ivo
in+or&ado no )arQ&e*ro( re*irando .%ais.%er in+or&a8;es de 0a&in/o
)ara o &es&o.
O%*ra 0onse.R>n0ia des*e 0o&ando - a de .%e &es&o
res*rin$indo7se )ara .%e no se9a )assado nen/%& )arQ&e*ro 0o&
dire*5rio( ainda )er&i*e a vis%a!iza8o/exe0%8o de s0ri)*s e
ar.%ivos *ex*os do dire*5rio a*%a!.
A +or&a &ais 0orre*a e se$%ra de se %*i!izar %& in0!%de de
ar.%ivos )ara %&a de*er&inada vari:ve! - %*i!izando o 0o&ando
switch()
3
. O 05di$o +i0aria en*o da se$%in*e +or&a<
HI)/)
// 2n0!%i o 0ae8a!/o da ):$ina<
in0!%de ( J0ae0a!/o.)/)K)D
// 2n0!%i a ):$ina re.%isi*ada<
sGi*0/ ( L)a$ina)
S
0ase Jini0ia!K<
in0!%de Jini0ia!.)/)KD
reaBD
0ase J0on*a*oK<
in0!%de J0on*a*o.)/)KD
reaBD
0ase J0!ien*esK<
in0!%de J0!ien*es.)/)KD
reaBD
de+a%!*<
e0/o JA ):$ina re.%isi*ada no )ode ser en0on*rada.KD
reaBD
T
// 2n0!%i o roda)- da )a$ina<
in0!%de ( Jroda)e.)/)K)D
IM
C#digo ($ %&em"lo de c#digo no vulner)vel a Cross-site Scri"ting
3 http://www.php.net/manual/pt_BR/control-structures.switch.php
4
Es*e 0o&ando )oss%i %&a !i&i*a8o< Caso se9a ne0ess:ria a
)assa$e& de %& dire*5rio 0o&o )arQ&e*ro( o &es&o ser:
ex0!%,do.
A van*a$e& de se %*i!izar o 0o&ando switch() - .%e *e&os %&
&aior 0on*ro!e sore o sis*e&a( !i&i*ando o .%e )ode ser exe0%*ado
o% no( e *a&-& res*rin$indo a exii8o de ):$inas e&
desenvo!vi&en*o o% .%e no se .%eira .%e se9a& ex)os*as.
A desa*iva8o da +%n0ionai!idade de URL Wrapper no P'P
a*in$e diversos 0o&andos( o% *odos .%e a0ei*e& %& no&e de ar.%ivo
0o&o )arQ&e*ro )ara )ro0ess:7!os. En*re es*es( es*o< include()
4
(
include_once()( require()( require_once()( fopen()( readfile()(
file()( file_get_contents()( e*0...
2.1.1 *endo uma ")gina remota
Para se !er %&a ):$ina Ge re&o*a( )ode7se %*i!izar a
se$%in*e +%n8o<
4 http://www.php.net/manual/pt_BR/function.include.php

HI)/)
// @%n8o )ara a0essar %&a ):$ina Ge e re*ornar se% 0on*e1do<
+%n0*ion a0essaO)a$ina ( L%r!)
S
// Se)ara in+or&a8;es da URA re.%isi*ada<
Lre. N )arseO%r! ( L%r!)D
// ?eri+i0a se o es.%e&a re.%isi*ado - '==P( se no +or( re*orna +a!so<
i+ ( Lre.UJs0/e&eKV WN J/**)K)
S
re*%rn +a!seD
T
// ?eri+i0a se a )or*a +oi es)e0i+i0ada( seno( %*i!iza a )adro (X")<
i+ ( e&)*Y ( Lre.UJ)or*KV))
S
Lre.UJ)or*KV N X"D
T
// Cone0*a ao servidor re&o*o<
i+ ( W L+) N Z+so0Bo)en ( Lre.UJ/os*KV( Lre.UJ)or*KV))
S
re*%rn +a!seD
T
// Cria o )edido de re.%isi8o '==P da ):$ina<
Lre.%es* N JGE= J . Lre.UJ)a*/KVD
i+ ( W e&)*Y ( Lre.UJ.%erYKV))
S
Lre.%es* .N JIK . Lre.UJ.%erYKVD
T
Lre.%es* .N J '==P/1."[r[nKD
Lre.%es* .N J'os*< J . Lre.UJ/os*KV . J[r[n[r[nKD
// Envia o )edido<
+Gri*e ( L+)( Lre.%es*)D
// =ra*a&os o re*orno do servidor<
L0on*e%do N JKD
L/eaders N *r%eD
G/i!e ( W +eo+ ( L+)))
S
// Ae&os 1"2\ 0ara0*ers<
L)ar0ia! N +$e*s ( L+)( 1"2\)D
i+ ( L/eaders NN *r%e)
S
// Pro0%ra&os )e!a )ri&eira !in/a e& ran0o( )ois sina!iza o +ina! dos
0ae8a!/os.
// E%ando a0/ar&os( se*a&os o 0ae8a!/o )ara +a!so( )ara .%e 0o&e0e a *rans+erir
o
// 0on*e1do )ara a vari:ve! L0on*e1do.
i+ ( s%s*r ( L)ar0ia!( "( 1) NN 0/r ( "x"A) ]] s%s*r ( L)ar0ia!( "( 1) NN 0/r (
"x"D))
S
L/eaders N +a!seD
T
T e!se S
// Adi0iona&os o 0on*e1do a vari:ve!<
L0on*e%do .N L)ar0ia!D
T
T
// @ina!izando( +e0/a&os o )on*eiro e re*orna&os o 0on*e1do do si*e<
+0!ose ( L+))D
re*%rn L0on*e%doD
T
IM
C#digo +$ ,uno "ara re-uisio de ./*
!
2.2 S0* In1ection
U& )ro!e&a .%e a+e*a )ra*i0a&en*e *odas !in$%a$ens de
)ro$ra&a8o .%e a0essa& an0os de dados - a v%!nerai!idade de SEA
2n9e0*ion.
Es*a v%!nerai!idade( )er&i*e .%e %& %s%:rio .%e a0esse %&
05di$o .%e 0on*en/a %&a re.%isi8o a %& an0o de dados SEA( insira
.%ais.%er 0o&ando nes*a re.%isi8o.
A v%!nerai!idade 0onsis*e e& a)rovei*ar a es*r%*%ra da
!in$%a$e& SEA( .%e %*i!iza as)as si&)!es )ara de!i&i*ar %&
0on*e1do *ex*o. E%ando se %*i!iza dire*a&en*e o 0on*e1do de %&a
vari:ve! )assada )e!o 0!ien*e( )ode7se adi0ionar %&a as)a( e
0on*in%ar os 0o&andos SEA nes*a vari:ve!. 2sso +ar: 0o& .%e o SEA
exe0%*e o 0o&ando ini0ia!&en*e es0ri*o )e!o desenvo!vedorD +e0/e a
as)a e de)ois 0on*in%e 0o& o 05di$o &a!i0ioso. ': a )ossii!idade(
ainda( de %*i!izar7se %& )on*o e v,r$%!a( )ara in0!%ir %& novo
0o&ando SEA na &es&a exe0%8o.
Se$%e %& exe&)!o de 05di$o v%!ner:ve!<
HI)/)
// Cone0*a ao servidor 3YSEA<
i+ ( W L2D N Z&Ys.!O0onne0* ( J!o0a!/os*K( J%s%arioK( Jsen/aK))
S
die ( JErro< 6o +oi )oss,ve! 0one0*ar ao servidor de an0o de dados.K)D
T
// Se!e0iona a ase de dados<
i+ ( W Z&Ys.!Ose!e0*Od ( JaseK( L2D))
S
die ( JErro< 6o +oi )oss,ve! se!e0ionar a ase de dados.K)D
T
// ?eri+i0a a%*en*i0a8o do %s%:rio<
i+ ( W Lres%!* N Z&Ys.!O.%erY ( JSEAEC= ^ @RO3 %s%arios _'ERE USER N CL%s%arioC A6D
PASS N CLsen/aCK( L2D))
S
die ( JErro< 6o +oi )oss,ve! rea!izar a )es.%isa no an0o de dados.K)D
T
// ?eri+i0a se o %s%:rio +oi a%*en*i0ado<
i+ ( &Ys.!On%&OroGs ( Lres%!*) NN ")
S
die ( JErro< Us%:rio e/o% sen/a inv:!idos.K)D
T
// Rea!iza 05di$o a%*en*i0ado...
IM
C#digo 2$ %&em"lo de c#digo com vulnera!ilidade de S0* In1ection
A*rav-s do 05di$o a0i&a( )ode&os ex)!orar o &es&o de diversas
&aneiras. Co&o )or exe&)!o<
/**)<//GGG.se%si*e.0o&.r/0odi$o`.)/)I%s%arioNad&inCD
2s*o +ar: 0o& .%e a s*rin$ de re.%isi8o ao an0o de dados
"
se9a a!*erada )ara<
SEAEC= ^ @RO3 %s%arios _'ERE USER N Cad&inCDC A6D PASS N CC
O servidor SEA re*ornar: a )ri&eira !in/a 0on*endo o %s%:rio
Jad&inK( e )os*erior&en*e des0ar*e a se$%nda re.%isi8o )or 0on*er
erro( +azendo 0o& .%e o 0!ien*e a0esse o sis*e&a se& a%*en*i0a8o
0o&o %& %s%:rio ad&inis*rador.
Pode7se rea!izar o%*ras re.%isi8;es( in0!%sive des*r%*ivas na
ase de dados( 0o&o )or exe&)!o<
/**)<//GGG.se%si*e.0o&.r/0odi$o`.)/)I%s%arioNCDDROP =AaAE %s%ariosD
E%e +aria 0o& .%e a *ae!a de %s%:rios do an0o de dados
+osse 0o&)!e*a&en*e a)a$ada.
O P'P )oss%i %&a +%n8o 0/a&ada addslashes()
5
( .%e re0ee 0o&o
)arQ&e*ro o 0on*e1do ao .%a! se dese9a )assar ao SEA( e re*orna o
&es&o de +or&a se$%ra( o% se9a( 0o& 0ara0*eres .%e *orna& as as)as
0o&o 0ara0*eres !i*erais( ao inv-s de 0o&andos( a*rav-s da
%*i!iza8o de 0ara0*eres de es0a)e. 2s*o +az 0o& .%e a ex)!ora8o
des*a v%!nerai!idade se9a i&)ossii!i*ada.
A!$%ns servidores P'P )oss%e& %&a +%n0iona!idade .%e a)!i0a
a%*o&a*i0a&en*e a *rad%8o de 0ara0*eres v%!ner:veis a SEA
2n9e0*ion (- 0o&o se *odos os )arQ&e*ros re0eidos *ivesse& sido
)assados )e!a +%n8o addslashes()). Por es*e &o*ivo( deve&os
veri+i0ar se a +%n0iona!idade es*: a*iva. Pode&os %*i!izar a
se$%in*e +%n8o )ara re*ornar o va!or 0orri$ido( inde)enden*e&en*e
da 0on+i$%ra8o do servidor<
HI)/)
// Adi0iona&os %&a +%n8o )ara veri+i0ar se o servidor exe0%*o% adds!as/es() de +or&a
// *rans)aren*e( seno exe0%*a&os<
+%n0*ion 0/e0Bs!as/es ( Lva!or)
S
i+ ( W $e*O&a$i0O.%o*esO$)0 ())
S
re*%rn adds!as/es ( Lva!or)D
T e!se S
re*%rn Lva!orD
T
T
IM
C#digo 3$ %&em"lo de c#digo "ara utilizao correta do addslashes()
Por*an*o( )ode&os rees0rever o 05di$o v%!ner:ve! assi&<
http://www.php.net/manual/pt_BR/function.addslashes.php
#
HI)/)
// Cone0*a ao servidor 3YSEA<
i+ ( W L2D N Z&Ys.!O0onne0* ( J!o0a!/os*K( J%s%arioK( Jsen/aK))
S
die ( JErro< 6o +oi )oss,ve! 0one0*ar ao servidor de an0o de dados.K)D
T
// Se!e0iona a ase de dados<
i+ ( W Z&Ys.!Ose!e0*Od ( JaseK( L2D))
S
die ( JErro< 6o +oi )oss,ve! se!e0ionar a ase de dados.K)D
T
// ?eri+i0a a%*en*i0a8o do %s%:rio<
i+ ( W Lres%!* N Z&Ys.!O.%erY ( JSEAEC= ^ @RO3 %s%arios _'ERE USER N CK . 0/e0Bs!as/es
( L%s%ario) . JC A6D PASS N CK . 0/e0Bs!as/es ( Lsen/a) . JCK( L2D))
S
die ( JErro< 6o +oi )oss,ve! rea!izar a )es.%isa no an0o de dados.K)D
T
// ?eri+i0a se o %s%:rio +oi a%*en*i0ado<
i+ ( &Ys.!On%&OroGs ( Lres%!*) NN ")
S
die ( JErro< Us%:rio e/o% sen/a inv:!idos.K)D
T
// Rea!iza 05di$o a%*en*i0ado...
IM
C#digo 4$ %&em"lo de c#digo sem vulnera!ilidade de S0* In1ection
O 05di$o a0i&a %*i!iza a +%n8o checslashes() do0%&en*ada no
05di$o b( +azendo 0o& .%e os )arQ&e*ros in+or&ados se9a&
veri+i0ados e re*ornados de +or&a se$%ra.
Pode&os %*i!izar o 0o&ando stripslashes()
!
)ara re&over os
0ara0*eres adi0ionados no checslashes() e no addslashes() no 0aso
de .%erer&os &os*rar %& va!or na +or&a .%e +oi enviado.
2.( Incluso de valores em vari)veis internas
U&a v%!nerai!idade )o%0o ex)!orada( )or-& 0o& %& $rande
)o*en0ia! .%e i&)a0*a na se$%ran8a de %& sis*e&a( - a in0!%so de
vari:veis de %so in*erno do 05di$o.
Es*a v%!nerai!idade 0onsis*e na in0!%so de %&a vari:ve! 0o&
%& va!or de*er&inado )e!o 0!ien*e( +azendo 0o& .%e o sis*e&a
.%ando %*i!ize es*a vari:ve! ass%&a o va!or in+or&ado )e!o &es&o.
Por exe&)!o. E& %& sis*e&a de a%*en*i0a8o .%e in0!%i %&a
vari:ve! )ara veri+i0ar )os*erior&en*e se o %s%:rio +oi
a%*en*i0ado( 0o&o 0odi+i0ado aaixo<
! http://www.php.net/manual/pt_BR/function.stripslashes.php
$
HI)/)
// A%*en*i0a&os o %s%ario<
i+ ( L%s%ario NN J*es*eK cc Lsen/a NN Jsen/a*es*eK)
S
La%*en*i0ado N *r%eD
T
// Se$%e a!$%& 05di$o...
// A$ora veri+i0a&os se o %s%:rio +oi a%*en*i0ado( e &os*ra&os as o)8;es
ad&inis*ra*ivas<
i+ ( La%*en*i0ado)
S
sGi*0/ ( La0ao)
S
0ase Jex0!%iK<
ex0!%iO%s%ario ()D
reaBD
0ase Jadi0ionaK<
adi0ionaO%s%ario ()D
reaBD
de+a%!*<
e0/o JErro< Co&ando des0on/e0ido.KD
reaBD
T
T
IM
C#digo 5$ %&em"lo de c#digo vulner)vel a valores e&ternos
Pode&os %r!ar a a%*en*i0a8o a0i&a %*i!izando<
/**)<//GGG.se%si*e.0o&.r/0odi$oX.)/)Ia%*en*i0adoN1
Es*e 0o&ando +aria 0o& .%e o %s%:rio no +osse a%*en*i0ado(
&as *eria a0esso a +%n8;es res*ri*as de ad&inis*ra8o( )ois o
05di$o veri+i0a a vari:ve! 'autenticado enviada )e!o 0!ien*e.
A &e!/or so!%8o )ara es*e 0aso - se desai!i*ar a
+%n0ionai!idade de register_globals
7
do servidor( e a0essar&os as
in+or&a8;es de vari:veis enviadas )or 0!ien*es de %&a +or&a
se$%ra. Pode&os veri+i0ar es*a o)8o 0o& o 0o&ando ini_get
( "register_globals#)
$
( 0o&o se$%e o exe&)!o<
" http://www.php.net/manual/pt_BR/security.%lobals.php
# http://www.php.net/manual/pt_BR/function.ini-set.php
1&
HI)/)
// ?eri+i0a se a +%n0ionai!idade Jre$is*erO$!oa!sK es*: desai!i*ada (&ais se$%ro)<
i+ ( iniO$e* ( Jre$is*erO$!oa!sK) NN *r%e)
S
die ( JErro< Es*e s0ri)* no )ode ser exe0%*ado de +or&a inse$%ra. Desa*ive a
+%n0ionai!idade Cre$is*erO$!oa!sC no servidor.K)D
T
// A%*en*i0a&os o %s%:rio<
i+ ( LOREEUES=UJ%s%arioKV NN J*es*eK cc LOREEUES=UJsen/aKV NN Jsen/a*es*eK)
S
La%*en*i0ado N *r%eD
T
// Se$%e a!$%& 0odi$o...
// A$ora veri+i0a&os se o %s%:rio +oi a%*en*i0ado( e &os*ra&os as o)8;es
ad&inis*ra*ivas<
i+ ( La%*en*i0ado)
S
sGi*0/ ( LOREEUES=UJa0aoKV)
S
0ase Jex0!%iK<
ex0!%iO%s%ario ()D
reaBD
0ase Jadi0ionaK<
adi0ionaO%s%ario ()D
reaBD
de+a%!*<
e0/o JErro< Co&ando des0on/e0ido.KD
reaBD
T
T
IM
C#digo 6$ %&em"lo de c#digo seguro a valores e&ternos
6o*a7se no 05di$o 9 .%e as vari:veis ex*ernas es*o sendo
*ra*adas )e!a vari:ve! Super Global
9
'7/%0.%S8
19
( .%e )oss%i *odas
as vari:veis e va!ores )assados )or %& 0!ien*e.
Es*a vari:ve! !eva e& 0onsidera8o *odos va!ores )assados
)e!os &odos GET( POST e COOIE( e .%e a*- 0er*a +or&a no )ode&
ser 0on+i:veis. A orde& e& .%e e!as so )ro0essadas )ara +or&ar
es*a Super Global - de*er&inada )e!a dire*iva !ariable_or"er no
ar.%ivo de 0on+i$%ra8o do P'P no servidor. Es*a dire*iva *e& )or
)adro a orde& de GET( POST e COOIE.
Caso vo0> dese9e( *a&-& )ode a0essar es*as in+or&a8;es
enviadas )or 0ada )ro*o0o!o es)e0,+i0o( a0essando os va!ores
a*rav-s das Super Globals '7:%8
11
( '7P;S8
12
e '7C;;<I%
1(
.
2.+ - %&"osio de in=ormaes do servidor >mensagens de erro?
$ http://www.php.net/manual/pt_BR/lan%ua%e.'ariables.predefined.php#lan%ua%e.'ariables.super%lobals
1& http://www.php.net/manual/pt_BR/reser'ed.'ariables.php#reser'ed.'ariables.re(uest
11 http://www.php.net/manual/pt_BR/reser'ed.'ariables.php#reser'ed.'ariables.%et
12 http://www.php.net/manual/pt_BR/reser'ed.'ariables.php#reser'ed.'ariables.post
13 http://www.php.net/manual/pt_BR/reser'ed.'ariables.php#reser'ed.'ariables.coo)ies
11
Diversas in+or&a8;es sore os s0ri)*s e sore a es*r%*%ra na
.%a! +oi 0on+i$%rado o servidor )ode& ser vis%a!izadas a*rav-s de
si&)!es &ensa$ens de erro( +orne0endo in+or&a8;es i&)or*an*es )ara
%& indiv,d%o .%e es*: *en*ando ex)!orar a!$%&a v%!nerai!idade.
A!-& das &ensa$ens de erro es*are& e& in$!>s( e!as )ode&
deixar o si*e 0o& %&a a)ar>n0ia a&adora( )or no *ra*ar os se%s
erros.
?o0> )ode %*i!izar o o)erador Z (arroa) an*es dos 0o&andos(
)ara evi*ar .%e 0aso o &es&o re*orne %& erro( es*e se9a
a)resen*ado ao 0!ien*e. Se$%e %& exe&)!o de 05di$o &os*rando erro<
HI)/)
Lid N &Ys.!O0onne0* ( J!o0a!/os*K( J%s%arioinva!idoK( Jsen/aK)D
IM
C#digo 19$ %&em"lo de c#digo sem tratamento de erros
O 05di$o a0i&a( 0on*endo %& %s%:rio inv:!ido( re*ornaria a
se$%in*e &ensa$e& de erro<
@arning< &Ys.!O0onne0*()< CanC* 0onne0* *o !o0a! 3YSEA server */ro%$/ so0Be*
C/var/r%n/&Ys.!.so0BC (2) in AsrvABtt"ACCC.seudominio.com.!rABtdocsAcodigo19."B" on !ine 2
Es*e erro( a!-& de ser i!e$,ve! )ara %& %s%:rio !ei$o(
dis)onii!iza in+or&a8;es sore a :rea onde o s0ri)* es*: sendo
/os)edado no servidor( assi& 0o&o es*r%*%ra in*erna do &es&o.
Pode&os %*i!izar de +or&a si&)!es( r:)ida e !i&)a o &es&o
05di$o<
HI)/)
i+ ( W Lid N Z&Ys.!O0onne0* ( J!o0a!/os*K( J%s%arioinva!idoK( Jsen/aK))
S
die ( JDes0%!)e7nos( o0orre% %& erro in*erno no sis*e&a. =en*e nova&en*e &ais *arde.
Se o )ro!e&a )ersis*ir( en*re e& 0on*a*o 0o& o ad&inis*rador do sis*e&a.K)D
T
IM
C#digo 11$ %&em"lo de c#digo com tratamento de erro
O o)erador Z %*i!izado exa*a&en*e an*es do 0o&ando
m%sql_connect() evi*a .%e o 0o&ando re*orne .%a!.%er &ensa$e& de
erro ao 0!ien*e. Ao inv-s dis*o( veri+i0a&os se a o)era8o +oi
rea!izada 0o& s%0esso( den*ro do if( re*ornando %&a &ensa$e&
a&i$:ve!.
2.2 - %&"osio de ar-uivos do sistema e outros do servidor
12
O%*ra v%!nerai!idade .%e 0o&%&en*e - es.%e0ida )e!os
ad&inis*radores dos servidores de /os)eda$e& - o +a*o de .%e o P'P
)ode vis%a!izar *odos os ar.%ivos do sis*e&a( in0!%indo ar.%ivos
de 0on+i$%ra8o( sen/as( s0ri)*s de o%*ros 0!ien*es( e*0( .%e o
servidor Ge *en/a )er&isso de !ei*%ra.
Es*a v%!nerai!idade )ode e deve ser !o.%eada )ara 0ada
do&,nio /os)edado no servidor )e!os ad&inis*radores. Os do&,nios
deve& *er a0esso so&en*e aos se%s ar.%ivos.
Es*a 0on+i$%ra8o evi*a .%e( &es&o .%ando /o%ver a
)ossii!idade de /aver %& s0ri)* 0on*endo v%!nerai!idade de
Cross7si*e s0ri)*in$ o% exis*ir %&a )essoa &a! in*en0ionada 0o&
a0esso @=P a :rea de /os)eda$e&( se9a& ex)os*os os ar.%ivos do
sis*e&a.
2.3 %&ecuo de "rogramas no servidor
Deve7se *a&-& desai!i*ar nos servidores P'P diversas
+%n8;es. A &aioria !i$ada dire*a&en*e a exe0%8o de )ro$ra&as no
servidor( a!-& das +%n8;es .%e &ani)%!a& )ro0essos in*ernos e a
&e&5ria do &es&o.
As +%n8;es .%e deve& ser desai!i*adas sao< e&ec()(
passthru()( popen()( pclose()( proc_close()( proc_get_status()(
proc_nice()( proc_open()( proc_terminate()( shell_e&ec()( s%stem()
e phpinfo().
Deve7se *a&-& desai!i*ar as se$%in*es 0!asses de 0o&andos<
s#s!s$%( s#s!se%( soc&ets( s$%op( 't"o%( posi(( "io( crac&.
( Daior "orta!ilidade
Deve7se )ro0%rar se&)re .%e )oss,ve! %*i!izar vari:veis
)adr;es )ara re0%)erar in+or&a8;es sore o sis*e&a e sore os
ar.%ivos no servidor. U*i!izando as vari:veis )adr;es( o*e&os %&a
&aior )or*ai!idade do sis*e&a desenvo!vido. A!$%&as vari:veis
i&)or*an*es so<
'7S%/%/EFPHP7S%*,GH< Ur! do s0ri)* .%e +oi exe0%*ado. d*i!
)ara se re+eren0iar %& +or&%!:rio )ara o )r5)rio s0ri)*(
+azendo 0o& .%e se o &es&o +or reno&eado( no ne0essi*e ser
a!*erado in*erna&en*e( a!e& de evi*ar erros de )ro$ra&a8oD
'7S%/%/EFI;C.D%N87/;;8GH< Re*orna o dire*5rio raiz da s%a
:rea de /os)eda$e&D
'7S%/%/EF/%D;8%7JII/GH< 2P do 0!ien*e .%e re.%isi*o% a
):$inaD
'7S%/%/EF/%D;8%7H;S8GH< Endere8o do 0!ien*e .%e re.%isi*o%
a ):$inaD
13
?o0> deve se&)re )ro0%rar %*i!izar as Super Globals( .%e so
vari:veis in*ernas do P'P 0on*endo diversas in+or&a8;es sore o
sis*e&a e o se% 05di$o.
Se&)re desenvo!va %*i!izando '7/%0.%S8( '7:%8( '7P;S8(
'7C;;<I%( )ois es*as so )adro e& .%a!.%er sis*e&a. E .%ando vo0>
)or*ar se% 05di$o )ara %& servidor se$%ro( o &es&o no ir:
ne0essi*ar de $randes a!*era8;es.
14

Você também pode gostar