Escolar Documentos
Profissional Documentos
Cultura Documentos
PROCERGS PHP Seguro PDF
PROCERGS PHP Seguro PDF
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