11.-Ataques Xss y Crsf .Parte 2
Transcript of 11.-Ataques Xss y Crsf .Parte 2
-
7/25/2019 11.-Ataques Xss y Crsf .Parte 2
1/4
ATAQUES XSS, COMOPREVENIRLOS EN PHP
En la lnea anterior estamos utilizando strip_tags()para permitir slo las
etiquetas que estamos indicando en el segundoparmetro "
" pero, que ocurrira si un atacanteincluyese el siguiente cdigo en el campo del comentario?...
Haz clic sobre mi para ver una mu!er hermosa
Estara inyectando cdigo Jaa!cript a tras del eento onmouseoer de
Jaa!cript, como podemos er el atacante podra redireccionar a cualquier
usuario a un script en su seridor para tratar, por e#emplo, de robar las
credenciales del usuario simulando la pgina de inicio de sesin de la $eb
atacada%
As que strip_tags()no es seguro para perm!r "e!ermna"as
e!que!as #!m$, "e $o %on!raro s NO queres perm!r nnguna
e!que!a #!m$ op%ona$, pue"es
u!$&ar htmlspecialchars() o htmlentities()en este caso no !e sera
ne%esaroel uso de npu!'($!erya que ests &unciones se encargarn de
conertir los caracteres especiales a sus respectias entidades '()*%
En el caso de que queramos incluir determinadas etiquetas '()*utilizaremos input-flterdel siguiente modo %%%
-
7/25/2019 11.-Ataques Xss y Crsf .Parte 2
2/4
/&iltrar el campo comentario&/,comentario = ,$ilter->process,12345"comentario"60%...
+on este ltro ya estamos eitando que cualquier atacante pueda -acer uso
de otro atributo que no sea src para las imgenes, impidiendo la e#ecucin
de cdigo Jaa!cript en alg.n mtodo Jaa!cript%
H!m$spe%a$%#ars
strin* htmlspecialchars strin* ,strin* 5) int ,$la*s = 7841932;4
7841H4?@ 5) strin* ,encodin* = 'A4-B' 5) bool ,double1encode =
true 666 0
Esta &uncin conierte los siguientes caracteres/0 121 3et4 se conierte en 1210 1"1 3comillas dobles4 se conierte en 1"1 cuando E5(657897(E! no estestablecido%0 "1" 3comilla simple4 se conierte en 111 3o 14 slo cuando E5(6897(E! estestablecido%0 11
!i queremos er la tabla entera de opciones podemos ir a la documentacinocial% !in embargo amos a mostrar la &orma ms adecuada de uso de la&uncin%
E#emplo de uso/
htmlspecialchars($_POST[var], ENT_QUOTES,'UTF!'"#
*a bandera ENT)QUOTESindica que amos a conertir a entidades
'()* ambos tipos de comillas% (anto las simples como las dobles%
En cuanto al 1c-arset1 de codicacin amos a elegir 9(:0; 3por de&ecto
en ' =%4% a que es contiene el con#unto de caracteres ms completo
y es el estndar para una aplicacin multi0idioma%
E@iste una &uncin muy similar a -tmlspecialc-ars34% !e trata de
#!m$en!!es*+or lo que tambin se podra usar para eitar
ataques A!!% !in embargo -tmlentities34 codica cualquier entidad
'()*, lo que -ar un pro%esamen!o e-!ra "e %o"(%a%.n sobre
elementos que no son potencialmente peligrosos%
En resumen las di&erencias entre ambas &unciones son las siguientes/
http://php.net/manual/es/function.htmlspecialchars.phphttp://php.net/manual/es/function.htmlspecialchars.phphttp://php.net/manual/es/function.htmlspecialchars.phphttp://php.net/manual/es/function.htmlspecialchars.php -
7/25/2019 11.-Ataques Xss y Crsf .Parte 2
3/4
#!m$spe%a$%#ars*+ slo escapa = caracteres que son < > 2 y las
comillas tanto simples como dobles%
#!m$en!!es*+escapa cualquier carcter que tenga equialente en
-tml, por e#emplo, ocales acentuadas%
Qu es escapar?
Escapar un carcter es ante poner una contra barra detrs de l%
,variable = "9adena de teCto \"entre comillas\""%
echo ,variable%
+omo ern, las comillas que corresponden a la cadena se escapean con elcarcter B , permitiendo esto que las comillas puedan ser guardadas dentro
de la cadena, eitando que se con&undan con el cierre%
*os %ara%!eresreserados de un lengua#e deben ser es%apa"ospara queen su compilacin no se abran las cadenas n se ma$ n!erpre!e e$%."go
Nota sobre PHP Formulario de Seguridad
*os C 6!EDED F"'6!E*:"G ariable puede ser utilizado por los-acHersI
!i '6!E*: se utiliza en su pgina, entonces el usuario puedeintroducir una barra 34 y algo ms de +ross !ite !cripting 3A!!4manda a e#ecutar%
Cross's!e s%rp!ng *XSS+ es un !po "e /u$nera0$"a" "e
segur"a" n1orm2!%a se en%uen!ran !p%amen!e en $as
ap$%a%ones 3e0XSS perm!e a $os a!a%an!es n4e%!ar
se%uen%as "e %oman"os "e$ $a"o "e$ %$en!e en $as p2gnas 5e0
/s!a"as por o!ros usuaros
!upongamos que tenemos el siguiente &ormulario en una pginallamada "test6&orm%p-p"/
K-ora, si un usuario introduce la 9D* normales en la barra de
direcciones como "-ttp/$$$%e@ample%comtest6&orm%p-p", el cdigoanterior se traduce a/
-
7/25/2019 11.-Ataques Xss y Crsf .Parte 2
4/4
'asta a-ora, todo bien%
!in embargo, tenga en cuenta que un usuario entra en la siguiente
9D* en la barra de direcciones/
http://www.eCample.com/test1$orm.php/FGGF7F9scriptF7alert'haced'0
F9/scriptF7
En este caso, el cdigo anterior ser traducido a/
alert31-acHed14
Este cdigo aMade una etiqueta de script y un comando de alerta%
cuando se carga la pgina, se e#ecutar el cdigo Jaa!cript 3elusuario er un cuadro de alerta4% Esto es slo un e#emplo sencillo eino&ensio cmo se puede e@plotar la ariable '6!E*:%
! consciente de quecualquier cdigo6a/aS%rp! se pue"eagregar "en!ro "e $a e!que!a 7s%rp!899n -acHer puederedirigir al usuario a un arc-io en otro seridor, y ese arc-io puedecontener cdigo malicioso que puede alterar las ariables globales oeniar el &ormulario a otra direccin para guardar los datos de losusuarios, por e#emplo%
Cmo evitar _S!"#!" $%PHP_S!&F%' !ploits
C 6!EDED F"'6!E*:"G -azaMas se puede eitar mediante el uso dela &uncin -tmlspecialc-ars34%
El cdigo del &ormulario debera tener este aspecto/
*a &uncin #!m$spe%a$%#ars *+conierte caracteres especiales aentidades '()*%K-ora bien, si el usuario intenta e@plotar la ariable'6!E*:, el resultado ser el siguiente resultado/
El e@ploit intento &alla, y no se -ace daMoI