Autor
|
Tema: Código PHP AntiXSS (Leído 27,500 veces)
|
born2kill
|
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 Totalmente de acuerdo...
|
|
|
En línea
|
|
|
|
yeikos
Desconectado
Mensajes: 1.424
|
<?php function limpia($var){ $malo = array("\\","\'","'","%",";",":","&","#"); while($i<=$o){ $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!\"#$%&'()*+,-./@?>=<;:"; echo "limpia() ".fncTime($intStart,$intEnd)."<br><br>"; echo "htmlentities() ".fncTime($intStart,$intEnd); ?>
limpia() 0.00010871887207
htmlentities() 2.86102294922E-5
En fin, sobran las palabras...
|
|
|
En línea
|
|
|
|
NewLog
|
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... <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\'-hlaEste es el código de recepcion: <?php $var = $_GET["vuln"]; ?> <FORM> <BR> Has escrito: <?php echo $var2; ?> </FORM>
Y esta es la salida: (hola<>\\\\\\\"n\\\'-hlaNo 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 : 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
Mensajes: 1.424
|
NewLog, revisa el código fuente del resultado que obtienes con tu código. <FORM> <BR> Has escrito: (hola<>\\\\\\\\\\\\\\\"n\\\\\\\'-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
|
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
Mensajes: 1.424
|
Cuando dije lo del RFI me refería a esto: <?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
|
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
Mensajes: 808
no no soy malo... soy vicioso :p
|
Si alguien logra vulneral
YO, tu web es vulnerable a xss http://piratas.com.es/ hi ,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
Mensajes: 5.110
|
NewLog, revisa el código fuente del resultado que obtienes con tu código. <FORM> <BR> Has escrito: (hola<>\\\\\\\\\\\\\\\"n\\\\\\\'-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(): 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
Mensajes: 67
|
<?php function limpia($var){ $malo = array("\\","\'","'","%",";",":","&","#"); while($i<=$o){ $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!\"#$%&'()*+,-./@?>=<;:"; echo "limpia() ".fncTime($intStart,$intEnd)."<br><br>"; echo "htmlentities() ".fncTime($intStart,$intEnd); ?>
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()... 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/1597491543Ahí 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
|
|
|
|
|
|