elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking (Moderador: toxeek)
| | |-+  Código PHP AntiXSS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 3 [4] 5 Ir Abajo Respuesta Imprimir
Autor Tema: Código PHP AntiXSS  (Leído 25,779 veces)
born2kill

Desconectado Desconectado

Mensajes: 173


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #30 en: 4 Agosto 2007, 03:10 am »

Repito, propongo estudiar la función anterior por si hubiera alguna falla. Y para las/los osadas/dos publicar alguna función que pretenda superar aquella. O la que publique en un principio ;D

Totalmente de acuerdo...
En línea

yeikos


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #31 en: 4 Agosto 2007, 03:37 am »

Código
  1. <?php
  2. function limpia($var){
  3. $malo = array("\\","\'","'","%",";",":","&","#");
  4. $i=0;$o=count($malo);
  5. while($i<=$o){
  6. $var = str_replace($malo[$i],"",$var);
  7. $i++;
  8. }
  9. return $var;
  10. }
  11.  
  12. function fncTime($tmpStart, $tmpEnd) {
  13. $expStart = explode(" ", $tmpStart); $intStart = $expStart[1].$expStart[0];
  14. $expEnd = explode(" ", $tmpEnd); $intEnd = $expEnd[1].$expEnd[0];
  15. return $intEnd-$intStart;
  16. }
  17.  
  18. $string = "abcdefghijklmnñopkrstuvwkyz0123456789!\"#$%&'()*+,-./@?>=<;:";
  19.  
  20. $intStart = microtime(); $var =limpia($string); $intEnd = microtime();
  21. echo "limpia() ".fncTime($intStart,$intEnd)."<br><br>";
  22.  
  23. $intStart = microtime(); $var = htmlentities($string, ENT_QUOTES); $intEnd = microtime();
  24. echo "htmlentities() ".fncTime($intStart,$intEnd);
  25. ?>

Citar

   limpia() 0.00010871887207

   htmlentities() 2.86102294922E-5


En fin, sobran las palabras...
En línea

NewLog


Desconectado Desconectado

Mensajes: 329



Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #32 en: 4 Agosto 2007, 16:34 pm »

Llevo varios dias siguiendo este hilo y a dia de hoy tengo varias preguntas...

Primero de todo, he provado el htmlentities.. Y con estos códigos y está entrada me da una salida que no entiendo...

Código
  1. <FORM ACTION="CodigoAntiXSSRecepcion.php" METHOD="get">
  2.  
  3.   <INPUT TYPE="text" NAME="vuln">
  4. <BR><BR>
  5.   <INPUT TYPE="submit" VALUE="Enviar">
  6.  
  7. </FORM>

Esto es lo que le he introducido: (hola<>\\\"n\'-hla

Este es el código de recepcion:

Código
  1. <?php
  2.  
  3. $var = $_GET["vuln"];
  4. $var2 = htmlentities($var, ENT_QUOTES);
  5.  
  6. ?>
  7. <FORM>
  8. <BR>
  9. Has escrito: <?php echo $var2; ?>
  10. </FORM>


Y esta es la salida: (hola<>\\\\\\\"n\\\'-hla

No se me tendrían que eliminar tags como '<', '>', '\','&'??? Si no es así no sé para qué usar htmlentities...

Con el otro código me ha funcionado...el input era (hola<>\\\"n\'-hla& y el output ha sido: (hola<>"n-hla , con lo que me ha eliminado lo que tenía que eliminar.


Aquí va mi otra duda, se ha demostrado que el código de htmlentities es bastante más rápido, pero con el casero puedo evitar entradas como :

Código:
CHAR(83,69,76,69,67,84,32, 42,32,70,82,79,77,32,81,85,69,82,73,69,83)

Para evitar SQL injections.

O cadenas codeadas en hexadecimal o octal para evitar un RFI, no?

Por lo que he leido eso no lo puedes hacer con la función nativa.


Aviso: Soy un completo novato... Así que piedad si digo estupideces ^^
« Última modificación: 4 Agosto 2007, 16:38 pm por NewLog » En línea

yeikos


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #33 en: 4 Agosto 2007, 16:45 pm »

NewLog, revisa el código fuente del resultado que obtienes con tu código.

Citar
<FORM>
<BR>
Has escrito: (hola&lt;&gt;\\\\\\\\\\\\\\\&quot;n\\\\\\\&#039;-hla</FORM>

Para evitar el SQL Injection tan solo tendremos que colocar los parámetros entre comillas simples y filtrar la variable de entrada con htmlentities() o mysql_escape_string().

Y para evitar el RFI simplemente no hay que dejar en manos de una variable dinámica que archivo será el incrustado...
En línea

NewLog


Desconectado Desconectado

Mensajes: 329



Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #34 en: 4 Agosto 2007, 16:58 pm »

Mmmmm... ahora lo entiendo mejor! Ya he visto que el código fuente ha sido 'traducido'.

Así que htmlentities no tiene ningún error, no? Sólo dificulta el trabajo posterior con la variable, no? (como ha dicho Sidarckcat). Pero tengo entendido que con html_entity_decode() eso se soluciona en un plis, plas.

Así que realmente htmlentities es la clave. Después basta con no usar 'includes' para evitar RFI, y usar comillas simples y htmlentities otra vez para evitar Sql Injections.

Gracias por esta discusión ^^ !
En línea

yeikos


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #35 en: 4 Agosto 2007, 17:11 pm »

Cuando dije lo del RFI me refería a esto:

Código
  1. <?php // MAL
  2. include("/modules/".$_GET['page']);
  3. ?>
  4.  
  5. <?php // BIEN
  6. switch ($_GET['page']) {
  7. case "main": include("/modules/main.php"); break;
  8. case "login": include("/modules/login.php"); break;
  9. case "register": include("/modules/register.php"); break;
  10. }
  11. ?>
  12.  
En línea

NewLog


Desconectado Desconectado

Mensajes: 329



Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #36 en: 5 Agosto 2007, 02:01 am »


Después basta con no usar 'includes' para evitar RFI


A eso me refería! Aunque gracias por poner cual seria la manera correcta!
En línea

oRTNZ


Desconectado Desconectado

Mensajes: 808


no no soy malo... soy vicioso :p


Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #37 en: 5 Agosto 2007, 09:10 am »

Si alguien logra vulneral
YO, tu web es vulnerable a xss http://piratas.com.es/ hi  :P,saludos
En línea

(31 del 12 de 2005) un dia que recuerdo siempre! :p
(03 del 08 de 2006) otro dia que lo recordare siempre...
Si eres Peruano, QUEDATE y si quieres ser de segunda mano del pais que fueras, pues LARGATE Y NO REGRESES...
дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.110


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #38 en: 5 Agosto 2007, 12:44 pm »

NewLog, revisa el código fuente del resultado que obtienes con tu código.

Citar
<FORM>
<BR>
Has escrito: (hola&lt;&gt;\\\\\\\\\\\\\\\&quot;n\\\\\\\&#039;-hla</FORM>

Para evitar el SQL Injection tan solo tendremos que colocar los parámetros entre comillas simples y filtrar la variable de entrada con htmlentities() o mysql_escape_string().

Y para evitar el RFI simplemente no hay que dejar en manos de una variable dinámica que archivo será el incrustado...

Es mejor usar mysql_real_escape_string():

Citar
Esta función es idéntica a mysql_real_escape_string() con la excepción de que mysql_real_escape_string() recibe un gestor de conexión y escapa la cadena de acuerdo al juego de caracteres actual. mysql_escape_string() no recibe un argumento de conexión, y no hace caso al valor actual del juego de caracteres.

Bueno pedazo de code que se echaron hee.

Saludos
En línea

19.5

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #39 en: 5 Agosto 2007, 18:11 pm »

Código
  1. <?php
  2. function limpia($var){
  3. $malo = array("\\","\'","'","%",";",":","&","#");
  4. $i=0;$o=count($malo);
  5. while($i<=$o){
  6. $var = str_replace($malo[$i],"",$var);
  7. $i++;
  8. }
  9. return $var;
  10. }
  11.  
  12. function fncTime($tmpStart, $tmpEnd) {
  13. $expStart = explode(" ", $tmpStart); $intStart = $expStart[1].$expStart[0];
  14. $expEnd = explode(" ", $tmpEnd); $intEnd = $expEnd[1].$expEnd[0];
  15. return $intEnd-$intStart;
  16. }
  17.  
  18. $string = "abcdefghijklmnñopkrstuvwkyz0123456789!\"#$%&'()*+,-./@?>=<;:";
  19.  
  20. $intStart = microtime(); $var =limpia($string); $intEnd = microtime();
  21. echo "limpia() ".fncTime($intStart,$intEnd)."<br><br>";
  22.  
  23. $intStart = microtime(); $var = htmlentities($string, ENT_QUOTES); $intEnd = microtime();
  24. echo "htmlentities() ".fncTime($intStart,$intEnd);
  25. ?>

Citar

   limpia() 0.00010871887207

   htmlentities() 2.86102294922E-5


En fin, sobran las palabras...
Se demora menos por que el array que tiene limpia() es menor al que tiene htmlentities()...

Si alguien logra vulneral
YO, tu web es vulnerable a xss http://piratas.com.es/ hi  :P,saludos
Por qué lo dices? si quieres discutir algo publica el código.

Como bien decía Sirdarckcat, cuando conocemos el ataque, también conocemos la manera de defendernos.
Se me ocurrio hacer una página de prueba para testear la seguridad de las funciones. Pero ahora estoy bastante colapsado en el tiempo y me gustaría hacerla tranquilamente.

Para los que se animen lean este libro:

-->link de rapidshare removido, compren el libro xD<--
http://www.amazon.com/Cross-Site-Scripting-Attacks-Exploits/dp/1597491543

Ahí esta escrita la función que se publico anteriormente y analiza algunos tipos de ataques...

Saludos.
« Última modificación: 6 Agosto 2007, 05:29 am por Sirdarckcat » En línea

Páginas: 1 2 3 [4] 5 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines