Cual es el procedimiento mas efectivo para evitar XSS?

Iniciado por exploiterstack, 27 Enero 2015, 11:12 AM

0 Miembros y 1 Visitante están viendo este tema.

exploiterstack

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! ;)

el-brujo

#1
Código (php) [Seleccionar]
//xss mitigation functions
function xssafe($data,$encoding='UTF-8')
{
  return htmlspecialchars($data,ENT_QUOTES | ENT_HTML401,$encoding);
}
function xecho($data)
{
  echo xssafe($data);
}



Código (php) [Seleccionar]
function SanitizeInputXSS($dirty_input) {
      return htmlspecialchars(rawurldecode(trim($dirty_input)), ENT_QUOTES,'UTF-8');
}

$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

exploiterstack

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! ;)

Shell Root

Código (php) [Seleccionar]
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
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

exploiterstack

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! ;)

exploiterstack

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! ;)