elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
06 Septiembre 2008, 02:13  



+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderadores: sirdarckcat, berz3k)
| | |-+  Código PHP AntiXSS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Imprimir
Autor Tema: Código PHP AntiXSS  (Leído 2056 veces)
born2kill

Desconectado Desconectado

Mensajes: 176


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

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
Colaborador

Desconectado Desconectado

Mensajes: 1.363



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

Código
<?php
function limpia($var){
$malo = array("\\","\'","'","%",";",":","&","#");
$i=0;$o=count($malo);
while($i<=$o){
$var = str_replace($malo[$i],"",$var);
$i++;
}
return $var;
}
 
function fncTime($tmpStart, $tmpEnd) {
$expStart = explode(" ", $tmpStart); $intStart = $expStart[1].$expStart[0];
$expEnd = explode(" ", $tmpEnd); $intEnd = $expEnd[1].$expEnd[0];
return $intEnd-$intStart;
}
 
$string = "abcdefghijklmnñopkrstuvwkyz0123456789!\"#$%&'()*+,-./@?>=<;:";
 
$intStart = microtime(); $var =limpia($string); $intEnd = microtime();
echo "limpia() ".fncTime($intStart,$intEnd)."<br><br>";
 
$intStart = microtime(); $var = htmlentities($string, ENT_QUOTES); $intEnd = microtime();
echo "htmlentities() ".fncTime($intStart,$intEnd);
?>

Citar

   limpia() 0.00010871887207

   htmlentities() 2.86102294922E-5


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

Desconectado Desconectado

Mensajes: 315



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

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
<FORM ACTION="CodigoAntiXSSRecepcion.php" METHOD="get">
 
  <INPUT TYPE="text" NAME="vuln">
<BR><BR>
  <INPUT TYPE="submit" VALUE="Enviar">
 
</FORM>

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

Este es el código de recepcion:

Código
<?php
 
$var = $_GET["vuln"];
$var2 = htmlentities($var, ENT_QUOTES);
 
?>
<FORM>
<BR>
Has escrito: <?php echo $var2; ?>
</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: 04 Agosto 2007, 16:38 por NewLog » En línea
yeikos
Colaborador

Desconectado Desconectado

Mensajes: 1.363



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

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: 315



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

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
Colaborador

Desconectado Desconectado

Mensajes: 1.363



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

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

Código
<?php // MAL
include("/modules/".$_GET['page']);
?>
 
<?php // BIEN
switch ($_GET['page']) {
case "main": include("/modules/main.php"); break;
case "login": include("/modules/login.php"); break;
case "register": include("/modules/register.php"); break;
}
?>
 
En línea
NewLog

Desconectado Desconectado

Mensajes: 315



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


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: 814


no no soy malo... soy vicioso :p


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

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...
Ing_Amc
WebDeveloper & DB Designer
Colaborador

Desconectado Desconectado

Mensajes: 4.398


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

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



La gente sueña por la noche con volar, nosotros salimos por la noche y volamos. JMF.
19.5

Desconectado Desconectado

Mensajes: 65


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

Código
<?php
function limpia($var){
$malo = array("\\","\'","'","%",";",":","&","#");
$i=0;$o=count($malo);
while($i<=$o){
$var = str_replace($malo[$i],"",$var);
$i++;
}
return $var;
}
 
function fncTime($tmpStart, $tmpEnd) {
$expStart = explode(" ", $tmpStart); $intStart = $expStart[1].$expStart[0];
$expEnd = explode(" ", $tmpEnd); $intEnd = $expEnd[1].$expEnd[0];
return $intEnd-$intStart;
}
 
$string = "abcdefghijklmnñopkrstuvwkyz0123456789!\"#$%&'()*+,-./@?>=<;:";
 
$intStart = microtime(); $var =limpia($string); $intEnd = microtime();
echo "limpia() ".fncTime($intStart,$intEnd)."<br><br>";
 
$intStart = microtime(); $var = htmlentities($string, ENT_QUOTES); $intEnd = microtime();
echo "htmlentities() ".fncTime($intStart,$intEnd);
?>

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: 06 Agosto 2007, 05:29 por Sirdarckcat » En línea
sirdarckcat
sdc
Moderador
*****
Desconectado Desconectado

Mensajes: 4.516


HAND


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #40 en: 06 Agosto 2007, 05:29 »

Hey!, le voy a decir a RSnake que estas pirateando su libro xD, link removido.. si lo quieren comprenlo, o ganenselo :P el foro ha tenido problemas con Microsoft Press por links de estos.. y pues, por cortesia a robert hansen, quito el link de aqui.. el me conoce, y conoce este foro.. :¬¬

Saludos!!
En línea

19.5

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #41 en: 06 Agosto 2007, 05:51 »

Ups! Pido disculpas. No sabía de aquello.
En todo caso, es una buena inversión.

Apenas tenga un poco de tiempo me animare a testear este asunto...
En línea
Páginas: 1 2 [3] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC