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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Cual es el procedimiento mas efectivo para evitar XSS?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cual es el procedimiento mas efectivo para evitar XSS?  (Leído 3,383 veces)
exploiterstack

Desconectado Desconectado

Mensajes: 102


Ver Perfil
Cual es el procedimiento mas efectivo para evitar XSS?
« en: 27 Enero 2015, 11:12 am »

Hola a toda la comunidad,

Hoy vengo con una duda que después de buscar no llego a una conclusión concreta, dicha duda que me inquieta es a la hora de realizar filtros para evadir los ataques conocidos como XSS.

Tras leer y leer me encontrado con una serie de métodos que puede que nos ayuden a crear un sistema lo suficientemente seguro como para de momento respirar un poco mas tranquilos ante estos ataques, dichos métodos que he visto son los siguientes:

htmlspecialchars
addslashes
stripslashes
htmlspecialchars
......


Pero lo que si que es verdad es que la gran mayoría de los post que hablan de ello y de como han de ser utilizados ya son algo antiguos y quisiera saber cuales son los métodos/técnicas mas efectivos hoy en día.

He visto que lo mas efectivo para los inputs de un formulario es recoger el dato haciendo uso de la siguiente concatenación y haciendo uso de la constante ENT_QUOTES:

addslashes(htmlspecialchars($_POST['texto'], ENT_QUOTES));

Pero como digo esto no es nada nuevo si observamos la fecha de algunos post de los que habla este foro sobre estos temas.

Espero que me podáis ayudar con este tema, un saludo! ;)


En línea

el-brujo
ehn
***
Desconectado Desconectado

Mensajes: 21.580


La libertad no se suplica, se conquista


Ver Perfil WWW
Re: Cual es el procedimiento mas efectivo para evitar XSS?
« Respuesta #1 en: 27 Enero 2015, 11:47 am »

Código
  1. //xss mitigation functions
  2. function xssafe($data,$encoding='UTF-8')
  3. {
  4.   return htmlspecialchars($data,ENT_QUOTES | ENT_HTML401,$encoding);
  5. }
  6. function xecho($data)
  7. {
  8.   echo xssafe($data);
  9. }


Código
  1. function SanitizeInputXSS($dirty_input) {
  2.      return htmlspecialchars(rawurldecode(trim($dirty_input)), ENT_QUOTES,'UTF-8');
  3. }
  4.  
  5. $name = SanitizeInputXSS($_POST['name']);  

Usar

FILTER_SANITIZE_STRING
FILTER_SANITIZE_SPECIAL_CHARS (. Equivalente a llamar a la función htmlspecialchars().)


Como localizar un bug XSS
http://foro.elhacker.net/seguridad/como_localizar_un_bug_xss-t389569.0.html


Muy viejo, del 2007:

Código PHP AntiXSS
http://foro.elhacker.net/hacking_avanzado/codigo_php_antixss-t174415.0.html

2006:

evitar XSS en eval()
http://foro.elhacker.net/nivel_web/evitar_xss_en_eval-t274302.0.html

WHK debería actualizar su guía:

Recopilatorio de Filtros, Casting y Parsing para PHP
http://foro.elhacker.net/php/recopilatorio_de_filtros_casting_y_parsing_para_php-t348221.0.html


« Última modificación: 27 Enero 2015, 11:55 am por el-brujo » En línea

exploiterstack

Desconectado Desconectado

Mensajes: 102


Ver Perfil
Re: Cual es el procedimiento mas efectivo para evitar XSS?
« Respuesta #2 en: 27 Enero 2015, 12:10 pm »

Hola el-brujo,

Entiendo que las tres opciones que presentas arriba son las mas efectivas hasta el dia de hoy. Pero quiero entender que es lo que hace realmente, por ejemplo no entiendo los parámetros después de la barra que le pasas a htmlspecialchars:

htmlspecialchars($data,ENT_QUOTES | ENT_HTML401,$encoding);

Se que a $encoding le asignas la cadena 'UTF-8' en la lista de parámetros de la función xssafe. Si fueras tan amable de explicarme lo que hace lo subrayado en negrita te lo agradecería.

Espero su respuesta, a y se me olvidaba tremendo aporte! ;)
En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: Cual es el procedimiento mas efectivo para evitar XSS?
« Respuesta #3 en: 27 Enero 2015, 14:09 pm »

Código
  1. string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
ENT_HTML401   Maneja el código como HTML 4.01.

:http://php.net/manual/es/function.htmlspecialchars.php
En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
exploiterstack

Desconectado Desconectado

Mensajes: 102


Ver Perfil
Re: Cual es el procedimiento mas efectivo para evitar XSS?
« Respuesta #4 en: 27 Enero 2015, 14:38 pm »

Se puede decir que la función htmlspecialchars() es mas segura empleando los parámetros que pone el-brujo que esta que propuse yo?

addslashes(htmlspecialchars($_POST['texto'], ENT_QUOTES));

De ser así en que se diferencia? se podría decir que la que el propone es lo ultimo de lo ultimo? de ser así el nivel de seguridad seria alto?

Espero su respuesta, un saludo! ;)
En línea

exploiterstack

Desconectado Desconectado

Mensajes: 102


Ver Perfil
Re: Cual es el procedimiento mas efectivo para evitar XSS?
« Respuesta #5 en: 28 Enero 2015, 09:55 am »

Por lo que entiendo y las pruebas que he realizado es lo siguiente:

htmlspecialchars(): Este método me va a mantener todos los tags que el usuario introduzca junto al texto, pero este texto no cogerá formato cuando lo muestre por pantalla, así como el javascript.

htmlentities() : Este método tiene como finalidad no escapar los tags, directamente lo que hace es suprimirlos, con lo que el código HTML/javascript que el usuario introduzca no se mantendrá.

addslashes() : Este método tiene como finalidad suprimir todos las comillas dobles y simples(',"). Pero tengo entendido que se pueden saltar fácilmente haciendo su equivalencia en otro tipo de codificación como por ejemplo el código ASCII.

MAGIC_QUOTES : Activar esta directiva en el servidor tengo entendido que es totalmente des aconsejable por el mismo motivo que antes visto con el método addslashes().

Se me escapa algo?

Espero vuestra respuesta, saludos! ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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