elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 17:24  


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking Avanzado (Moderadores: ANELKAOS, TRICKY)
| | |-+  Código PHP AntiXSS
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Código PHP AntiXSS  (Leído 9,307 veces)
born2kill

Desconectado Desconectado

Mensajes: 173


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #30 en: 4 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


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #31 en: 4 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: 327



Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #32 en: 4 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: 4 Agosto 2007, 16:38 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 »

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



Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #34 en: 4 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


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #35 en: 4 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: 327



Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #36 en: 5 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: 808


no no soy malo... soy vicioso :p


Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #37 en: 5 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...
дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.089


Mtz De C.


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #38 en: 5 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



Con sangre andaluza :)
19.5

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #39 en: 5 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: 6 Agosto 2007, 05:29 por Sirdarckcat » En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #40 en: 6 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: 67


Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #41 en: 6 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
Norant

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #42 en: 21 Octubre 2010, 23:52 »

Código
// Prevent any possible XSS attacks via $_GET.
foreach ($_GET as $check_url) {
   if ((eregi("<[^>]*script*\"?[^>]*>", $check_url)) || (eregi("<[^>]*object*\"?[^>]*>", $check_url)) ||
       (eregi("<[^>]*iframe*\"?[^>]*>", $check_url)) || (eregi("<[^>]*applet*\"?[^>]*>", $check_url)) ||
       (eregi("<[^>]*meta*\"?[^>]*>", $check_url)) || (eregi("<[^>]*style*\"?[^>]*>", $check_url)) ||
       (eregi("<[^>]*form*\"?[^>]*>", $check_url)) || (eregi("\([^>]*\"?[^)]*\)", $check_url)) ||
       (eregi("\"", $check_url))) {
die ();
}
}
unset($check_url);
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #43 en: 22 Octubre 2010, 17:36 »

no vayan a usar ese codigo para proteger contra xss.. no los va a proteger.
En línea

tragantras


Desconectado Desconectado

Mensajes: 466


Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #44 en: 24 Octubre 2010, 22:52 »


Código:
(,|;|<|>|'|`)
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!!

según he estado viendo,para usar el apply, igualemtne tienes que pasarle la referencia y luego los parámetros de la función

funcion.apply(this, parametros)

estoy equivocado?
En línea

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

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines