Foro de elhacker.net

Seguridad Informática => Seguridad => Mensaje iniciado por: Yaldabaot en 13 Agosto 2013, 23:37 pm



Título: Seguridad contra ataques de XSS
Publicado por: Yaldabaot en 13 Agosto 2013, 23:37 pm
Buenas, tengo una serie de dudas con respecto a protección de ataques de XSS, estoy tratando de proteger la web de la empresa en la que trabajo y me he dispuesto a utilizar una serie de pasos, con esto me han surgido dudas y bueno estas son:

1- ¿Qué tanto protegen las expresiones regulares de un ataque XSS?
2- ¿Que puedo usar aparte de las funciones de PHP como strip_tags , htmlentities, stripslashes.?


He puesto también escape_real_string para sanear las entradas, pero hago un test que viene en el mozilla firefox y tengo vubnerabilidas con ";" , "=" y " /".

No se si este es el foro adecuado, espero que lo sea, cabe destacar que estoy utilizando PHP 4 con MYSQL.

Señalo también que con respecto a ataques de inyección no estamos tan mal, me gustaría que me ayudasen; soy nuevo en esto un poco y no se de seguridad. Destaco que no usamos sesiones ni cookies, por tanto no tenemos agujeros ahí, los datos son capturados por medio del POST.

Gracias.






Título: Re: Seguridad contra ataques de XSS
Publicado por: #!drvy en 14 Agosto 2013, 00:18 am
Código
  1. <?php echo htmlentities($texto,ENT_QUOTES,'UTF-8'); ?>

Citar
He puesto también escape_real_string para sanear las entradas, pero hago un test que viene en el mozilla firefox y tengo vubnerabilidas con ";" , "=" y " /".

Eso es para consultas mysql y tampoco es de lo mejor. Para consultas es preferible que se usen sentencias preparadas (http://php.net/manual/es/mysqli.quickstart.prepared-statements.php).

Saludos


Título: Re: Seguridad contra ataques de XSS
Publicado por: Yaldabaot en 14 Agosto 2013, 00:24 am
Buenas, gracias por responder :D, estoy usando también la clase inputfilter.php, ¿Que tal es?, con respecto a lo que me dices lo he tratado de implementar pero no se como funciona bien, ¿cuáles son las cabeceras que debo poner o cómo?, lo he hecho con C# y Vb.NET pero no entiendo como se implementa. Te agradecería mucho, y bueno alguna que otra recomendación, muchísimas gracias!.

Por cierto, mi web cuenta con expresiones regulares de javascript, ¿Qué tanto me protegen?.


Título: Re: Seguridad contra ataques de XSS
Publicado por: #!drvy en 14 Agosto 2013, 00:35 am
Buenas, gracias por responder :D, estoy usando también la clase inputfilter.php, ¿Que tal es?

Nunca la llegue a usar.

con respecto a lo que me dices lo he tratado de implementar pero no se como funciona bien, ¿cuáles son las cabeceras que debo poner o cómo?, lo he hecho con C# y Vb.NET pero no entiendo como se implementa. Te agradecería mucho, y bueno alguna que otra recomendación, muchísimas gracias!.

Es codigo PHP. No tiene nada que ver con C# o VB.NET


Por cierto, mi web cuenta con expresiones regulares de javascript, ¿Qué tanto me protegen?.

Nada.

Saludos


Título: Re: Seguridad contra ataques de XSS
Publicado por: Yaldabaot en 14 Agosto 2013, 00:56 am

Es codigo PHP. No tiene nada que ver con C# o VB.NET


Saludos

No tienen nada que ver, pero su lógica es la misma, pasar por parámetros las sentencias. Creo que la única diferencia y corrijánme si estoy mal, es que el PHP las prepara, a eso me refería... .

¿Algún consejo adicional?, he leído sobre htaccess, eso podría ayudarme un poco. Agradezco la ayuda.


Título: Re: Seguridad contra ataques de XSS
Publicado por: GenR_18 en 14 Agosto 2013, 01:13 am
Primero que nada actualiza la versión del PHP a la actual, igual el MySQL (si es que lo utilizas).

Hablando de funciones "mágicas" del PHP para la seguridad, cabe aclarar la diferencia de validar y sanitizar.

Para validar recomiendo filter_var() (tanto para SQLi como XSS, o cualquier entrada del usuario)

Y para sanitizar puedes usar htmlentities($str,ENT_QUOTES) (no es necesario declarar el charset del UTF-8).

busca también sobre strip_tags() [yo la uso para "limpiar" la entrada del usuario cuando vaya a ingresarlo a una bd], htmlspecialchars() [Es casi lo mismo que la htmlentities()].

Nunca uses expresiones regulares en javascript, si lo vas a hacer que sea en PHP, su efectividad depende de tus conocimientos sobre ataques, sólo tú puedes saber si es segura o no :P

PD: En las SQLi usa PDO  :rolleyes:

Salu2!


Título: Re: Seguridad contra ataques de XSS
Publicado por: Yaldabaot en 14 Agosto 2013, 01:23 am
Hola :D, ¿Porque es inseguro utilizar expresiones regulares en javascript?.



 tags = strip_tags($tags);
 $tags = stripslashes($tags);
 $tags = htmlentities($tags,ENT_QUOTES);
 
Tenía algo así, sin el agregado que me acabas de decir "ENT_QUOTES". Tengo el campo limitado a unos 25 caracteres, y bueno le aplico lo que me dices a todas las entradas

Saludos y gracias!.


Título: Re: Seguridad contra ataques de XSS
Publicado por: #!drvy en 14 Agosto 2013, 01:41 am
Y para sanitizar puedes usar htmlentities($str,ENT_QUOTES) (no es necesario declarar el charset del UTF-8).

http://nedbatchelder.com/blog/200704/xss_with_utf7.html

Citar
htmlspecialchars() [Es casi lo mismo que la htmlentities()].

Solo que htmlentities codifica todos los caracteres HTML en vez de solo los especiales.

Citar
¿Porque es inseguro utilizar expresiones regulares en javascript?.

javascript es del lado del cliente. Por tanto un atacante simplemente puede desactivarlo.

Saludos


Título: Re: Seguridad contra ataques de XSS
Publicado por: GenR_18 en 14 Agosto 2013, 17:21 pm
http://nedbatchelder.com/blog/200704/xss_with_utf7.html

htmlentities() (http://php.net/manual/es/function.htmlentities.php)

Citar
encoding

    Al igual que htmlspecialchars(), htmlentities() toma un tercer argumento opcional encoding el cual define la codificación usada en la conversión. Si se omite, el valor por defecto para este argumento es ISO-8859-1 en versiones de PHP anteriores a 5.4.0, y es UTF-8 desde PHP 5.4.0 en adelante. Aunque este argumento es técnicamente opcional, es altamente recomendable especificar el valor correcto para el código.

Salu2!


Título: Re: Seguridad contra ataques de XSS
Publicado por: #!drvy en 14 Agosto 2013, 17:38 pm
htmlentities() (http://php.net/manual/es/function.htmlentities.php)

Salu2!

cabe destacar que estoy utilizando PHP 4 con MYSQL.

Si utiliza un hosting compartido, no puede actualizar su php...

Saludos


Título: Re: Seguridad contra ataques de XSS
Publicado por: GenR_18 en 14 Agosto 2013, 17:43 pm
Si utiliza un hosting compartido, no puede actualizar su php...

Saludos

Por eso comenté que lo actualizara (si es que puede), PHP4 tiene algunas vulnerabilidades, no sirve de nada tener el código seguro si la versión es vulnerable...


Título: Re: Seguridad contra ataques de XSS
Publicado por: Yaldabaot en 14 Agosto 2013, 21:01 pm
Hubo un error de interpretación y estamos usando acá PHP 5.3 con MYSQL 5.

He usado este tipo de filtrado:

 filter_var($buscar, FILTER_SANITIZE_STRING,FILTER_SANITIZE_SPECIAL_CHARS);

 $tags = htmlentities($tags,ENT_QUOTES,"UTF-8");

Junto el mencionado que puse arriba y otro método que agregan strips.

Agregué un replace con algunos caracteres:
 
$tags = str_replace('=','',$tags);

El test me dice que no tengo vulnerabilidades pero se cae el test xD.


Título: Re: Seguridad contra ataques de XSS
Publicado por: Tersk en 15 Agosto 2013, 07:32 am
Hola! yo ando como tú algo "perdido" con el tema de la seguridad de inyecciones y XSS.
Lo que comentan los compañeros o en el ejemplo que veo que has puesto lo que veo es que se pierde información.
Imagenemos que un usuario necesita poner un "<h1>" o un "=" en el campo que vayas a emplear eso... mediante el replace lo eliminas, y mediante los filtros tambien eliminas según que caracteres.

No sé, no lo veo una solucón eficaz capar así una web en caso de ocurrir eso.
Debe haber algo que no sea eliminar las ",',= etc etc de nuestra vida, no sé XD

Yo abrí no hace mucho un post al respecto con poco resultado, a mi lo que se me ocurre es que al usar las prepared statement nos aseguramos unas querys seguras en la bd... por lo que ahora el problema radica en mostrar esos datos desde la bd... y mediante un htmlspecialchars ó un htmlentities debería bastar para evitar los XSS ¿no? :S.


Título: Re: Seguridad contra ataques de XSS
Publicado por: Yaldabaot en 16 Agosto 2013, 20:24 pm
Hola Tersk, en mi caso no es necesario que los usuarios pongan tags, ";", "/" o "=", dado que estos caracteres no son necesarios con el tipo de información que manejo. Simplemente es un buscador de un cierto tipo de información.

Por ende esos caracteres "están de más", al final de cuentas use los replace, htmlentities,ENT_QUOTES, un método para eliminar los "magic_quotes" y espace_real_strings, con respecto a las inyecciones ya habían hecho un testing de lo mismo y estamos bien, únicamente fallamos con XSS.

Nunca está de más usar medidas, no sabes con que tipos de usuarios te topes en la red, yo trato al menos de ser cauteloso, pero se que será fácil romper con la seguridad, puesto que soy un novato en esto, pero al menos haré un poco difícil la tarea. He testeado y los caracteres "no se escapan", espero que sirva.


Título: Re: Seguridad contra ataques de XSS
Publicado por: GenR_18 en 19 Agosto 2013, 18:36 pm
No hay necesidad de "eliminar las comillas de nuestras vidas", simplemente vamos a escaparlas , busca bien en la documentación de php.net lo que hacen las funciones htmlentities y htmlspecialchars, no es sólo usarlas y ya, ahi que saber cómo funcionan...

Salu2!!


Título: Re: Seguridad contra ataques de XSS
Publicado por: Yaldabaot en 19 Agosto 2013, 23:46 pm
No hay necesidad de "eliminar las comillas de nuestras vidas", simplemente vamos a escaparlas , busca bien en la documentación de php.net lo que hacen las funciones htmlentities y htmlspecialchars, no es sólo usarlas y ya, ahi que saber cómo funcionan...

Salu2!!

Hola, en mi caso "Las comillas de mi vida" son innecesarias en mi web, puesto que no se realiza la búsqueda con "'", inclusive codificarlas lo he probado incontables veces me ha alivianado un poco contra XSS e inyección SQL, puesto que el ataque (aveces) viene con "'". Gracias por la respuesta.


Título: Re: Seguridad contra ataques de XSS
Publicado por: peter1958 en 22 Agosto 2013, 21:26 pm
estoy utilizando PHP 5.3.13 al ocupar esta clase inputFilter de esta manera:
<?php
require_once 'class/class.inputfilter.php';
$limpia = new InputFilter(array('a','hr','div'),array('href','target','id'));

/*$hola = '<script type="text/javascript">alert("Hola a todos");</script>';
$hola = $limpia->process($hola);
echo $hola;*/
$vinculo = '<a href="www.google.cl" target="_blank">Buscador</a><hr><div id="prueba">Prueba</div>';
$vinculo = $limpia->process($vinculo);
echo $vinculo;
?>
utilizando array de tag, da el siguiente error: -> Deprecated: Function eregi() is deprecated in C:\wamp\www\php_poo_cc\video29\class\class.inputfilter.php on line 203
aconsejeme para solucionar esto
gracias


Título: Re: Seguridad contra ataques de XSS
Publicado por: #!drvy en 22 Agosto 2013, 23:29 pm
eregi() esta obsoleto desde la 5.2 o algo asi. Utiliza stristr().

Saludos