Seguridad contra ataques de XSS

Iniciado por Yaldabaot, 13 Agosto 2013, 23:37 PM

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

Yaldabaot

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.




Nunca me contestan -_-

#!drvy

Código (php) [Seleccionar]
<?php echo htmlentities($texto,ENT_QUOTES,'UTF-8'); ?>

CitarHe 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.

Saludos

Yaldabaot

#2
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?.
Nunca me contestan -_-

#!drvy

Cita de: Yaldabaot en 14 Agosto 2013, 00:24 AMBuenas, gracias por responder :D, estoy usando también la clase inputfilter.php, ¿Que tal es?

Nunca la llegue a usar.

Cita de: Yaldabaot en 14 Agosto 2013, 00:24 AMcon 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


Cita de: Yaldabaot en 14 Agosto 2013, 00:24 AMPor cierto, mi web cuenta con expresiones regulares de javascript, ¿Qué tanto me protegen?.

Nada.

Saludos

Yaldabaot

Cita de: drvy en 14 Agosto 2013, 00:35 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.
Nunca me contestan -_-

GenR_18

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!

Yaldabaot

#6
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!.
Nunca me contestan -_-

#!drvy

Cita de: GenR_18 en 14 Agosto 2013, 01:13 AMY 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

Citarhtmlspecialchars() [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

GenR_18

Cita de: drvy en 14 Agosto 2013, 01:41 AM
http://nedbatchelder.com/blog/200704/xss_with_utf7.html

htmlentities()

Citarencoding

    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!

#!drvy

Cita de: GenR_18 en 14 Agosto 2013, 17:21 PM
htmlentities()

Salu2!

Cita de: Yaldabaot en 13 Agosto 2013, 23:37 PMcabe destacar que estoy utilizando PHP 4 con MYSQL.

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

Saludos