11.-Ataques Xss y Crsf .Parte 2

Embed Size (px)

Citation preview

  • 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