Código PHP AntiXSS

Iniciado por 19.5, 30 Julio 2007, 02:01 AM

0 Miembros y 2 Visitantes están viendo este tema.

born2kill

Cita de: yeikos en 30 Julio 2007, 10:46 AM
born2kill, cambia tu forma de pensar a no tengo que cometer esos fallos...

Haber, estamos analizando, como parar ataques XSS, o prevenirnos de ellos, esta claro que no se deben cometer esos fallos, pero estar prevenidos no viene mal.

Mi forma de pensar?...  :xD

Cita de: Sirdarckcat en 30 Julio 2007, 23:02 PM
born2kill:
(\"|%22).*(\>|%3E|<|%3C).*
supongo que es para prevenir attribute splitting, como en:
Código (php) [Seleccionar]

<?php
echo "<a href=\"{$_GET['entrada']}\">Link</a>";
?>


se puede saltar simplemente no cerrando el atributo
?a=" onmouseover="alert(/xss/.source)"


(\<|%3C).*script.*(\>|%3E)
se salta, igual no cerrando <script.. asi:
<script src=//sirdarckcat.net/cache_poisoning.js x


(javascript:).*(\;).*
no pones el ; al final..
Código (javascript) [Seleccionar]
javascript:alert("pwned")


(,|;|<|>|'|`)
la coma la puedes no usar llamando funciones desde funcion.apply, los ; puedes no usarlos, los "<" y ">" si los quitas, entonces para que son las primeras 2 reglas? XD, y las comillas, para ataques de XSS no son necesarias, puedes usar /texto/.source
Saludos!!

Mhh.... Me dejaste pensando, bueno evidentemente solamente podriamos para ataques básico, tengo que encontrar alguna forma de mejorarlo.




La lista que publicaste esta bien interesante.

sirdarckcat

19.5: si sabes en que contextos se pueden usar los valores "codificados" de <?
solo cuando de lado del servidor se decodifica el caracter, esos "alias" son validos.. en un vector "normal", no se pueden usar.

El filtro de quickwired esta bastante bien, detiene muchos vectores.. habria que analizarlo con tiempo, para ver si se le escapo algo :P

Saludos!!

<?BRoWLi?>

cifrando los tags <> => &lt;&gt;, se solventa el problema  :rolleyes:
Si TRaTaS D SeR JusTo SoLo Es JuSTo EL CoRaZóN, LoS DeMaS OrGaNoS TRaTaRaN De KiTaRLe La RaZoN - DobleV
Piratas.com.es

sirdarckcat

no siempre xD, los attribute breaking, no usan los tags < y > :P

Saludos!!

<?BRoWLi?>

Por el nombre será romper un atributo para meter otro, por ejemplo " onclick="javascript..., si es así bueno yo contaba con que ya se escapan las comillas simples y dobles, yo tengo el gpc ON y lo doy por echo siempre xD, si ese termino no tiene nada que ver con eso, me vendría de lujo una aclaración gracias!!  :D :D

Un saludo!!
Si TRaTaS D SeR JusTo SoLo Es JuSTo EL CoRaZóN, LoS DeMaS OrGaNoS TRaTaRaN De KiTaRLe La RaZoN - DobleV
Piratas.com.es

sirdarckcat

:P las GPC no sirven para eso.. un ejemplo muy sencillo..

1.- Recibes link = [ http://m" onclick="javascript ]
2.- Lo guardas en base de datos..
INSERT blah DATA ('http://m\" onclick=\"javascript')
3.- En otra pagina, lo imprimes, y salen las comillas sin los \ :P

Saludos!!

<?BRoWLi?>

No entiendo :P, yo hablaba de insertar el código (" onclick="javascript()...) en un input por ejemplo un buscador, no te dejaría acabar el atributo value del input ya que procesa la comilla doble antes de interpretarla.

Por ejemplo quedaría algo asi como:

<input type="text" value="\" atributo=\"loquesea\"">

en caso de no añador los slashes, rompería el atributo... Por otra parte si subes las comillas escapadas a una base de datos, al imprimirla es como si nunca hubieses escapado las comillas porque se procesan dos veces, para eso \\\", esto por ejemplo a la hora de imprimir imprimiría solo una comilla "... pero \\\\\", esto imprimiría \"...

Te digo que nunca oí eso de attribute breaking, solo lo e intentado deducir, por si se me va el santo al cielo xDDD
Si TRaTaS D SeR JusTo SoLo Es JuSTo EL CoRaZóN, LoS DeMaS OrGaNoS TRaTaRaN De KiTaRLe La RaZoN - DobleV
Piratas.com.es

sirdarckcat

#17
Citaren caso de no añador los slashes, rompería el atributo... Por otra parte si subes las comillas escapadas a una base de datos, al imprimirla es como si nunca hubieses escapado las comillas porque se procesan dos veces, para eso \\\", esto por ejemplo a la hora de imprimir imprimiría solo una comilla "... pero \\\\\", esto imprimiría \"...
Las magic quotes no escapan las cosas 2 veces jajajaja

Y en un buscador, con "GPC" on.. hay bug.. \" no detiene el atribute breaking..

-->Link enviado por MP<--

codigo fuente:
<input type=text name=q style="width: 166px" value="\" esto-es-un-atributo">
como puedes ver, el codigo DOM generado es:
<input name="q" style="width: 166px;" value="\" esto-es-un-atributo="" type="text">

Es decir, filtrar con slashes en codigo HTML no sirve de nada ;)

Saludos!!

<?BRoWLi?>

#18
CitarLas magic quotes no escapan las cosas 2 veces jajajaja

Me refiero a imprimir \"... en mi pag por ejemplo tengo todos los datos en una base de datos, y esos datos los subo apartir de un archivo especie instalador, donde antes de subir procesa las magic quotes, \" es = a ", \\\" es = a " tambien, porque en realidad el procesado es doble al subir y al imprimir, por eso es que se escribe \\\\\", el primer filtrado es igual a \\\" y el segundo, es decir la descarga desde la base de datos y la impresión de los datos es igual a \", no que las magic quotes escapen nada dos veces, sino que son procesadas dos veces.

EDITO: si imprimes el texto a buscar despues de introducirlo en el buscador, cierto! rompe el atributo aun con el addslashes! muchas gracias por el dato tio!!

En tal caso:

1. No imprimir el dato a buscar en el input
2. htmlentities
3. <>" = &lt;&gt;&quot;

No se si con la tercera me equivoco.

un saludo!!
Si TRaTaS D SeR JusTo SoLo Es JuSTo EL CoRaZóN, LoS DeMaS OrGaNoS TRaTaRaN De KiTaRLe La RaZoN - DobleV
Piratas.com.es

19.5

A ver A ver... Eso se esta desviando un poco...
Me parecio interesante que en una misma página se pueda probar una función cómo la que hay en esta página:

http://quickwired.com/smallprojects/php_xss_filter_function.php

Podríamos, como dice Sirdarckcat, "ver" si algo se le escapó.
Además, hay muchas páginas que muestran variadas formas de hacer un XSS. De verdad eso tiene mucho que hablar.
Estadísticas dicen que 8 de cada 10 sufren de este tipo de ataques...