Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Citrusl en 2 Diciembre 2019, 00:53 am



Título: Seguridad: Como puedo validar el filename en AJAX?
Publicado por: Citrusl en 2 Diciembre 2019, 00:53 am
AYUDA!

Estamos trabajando en un módulo web de formulario utilizando dropzone (El clásico Drag and Drop files).
Nos prohibieron el uso de PHP por los riesgos e inseguridad que representa su uso.
En su reemplazo utilizamos ASP.NET con MVC, javascript, AJAX y mySQL.

Actualmente un simple AJAX hace el upload a la carpeta del servidor con un metodo POST.
Existen algunas validaciones que vienen incluidas en Dropzone como por ejemplo, el formato de imagenes o el tamaño:

Ejemplo:

Código:
    <script type="text/javascript">
        Dropzone.autoDiscover = false;

        $(document).ready(function () {

            $("div#myAwesomeDropzone").dropzone(
            {
                    paramName: "file",
                    maxFiles: 6,
                    maxFilesize: 1000, // MB
                    acceptedFiles: ".png,.jpg,.gif,.bmp,.jpeg",
                    addRemoveLinks: true,                   
             });
        });
     </script>

Sin embargo, nos asustamos al ver la gran vulnerabilidad e ineficacia contra Exploits de distintos tipos (unos 12 aproximadamente) manipulando simplemente el filename.

Cómo metodo de seguridad alternativo obfuscamos los codigos javascript, lo cual nos da tiempo.

Alguien podría recomendarme o mostrarme una validacion completa en AJAX para prevenir estos ataques?

Ataques:

https://www.owasp.org/index.php/Unrestricted_File_Upload
https://www.hackingarticles.in/5-ways-file-upload-vulnerability-exploitation/





Título: Re: Seguridad: Como puedo validar el filename en AJAX?
Publicado por: engel lex en 2 Diciembre 2019, 01:17 am
Citar
Nos prohibieron el uso de PHP por los riesgos e inseguridad que representa su uso

 :xD :xD :xD :xD


creo que el que dijo eso no está muy solido en el tema XD

Citar
Sin embargo, nos asustamos al ver la gran vulnerabilidad e ineficacia contra Exploits de distintos tipos (unos 12 aproximadamente) manipulando simplemente el filename.

Cómo metodo de seguridad alternativo obfuscamos los codigos javascript, lo cual nos da tiempo.

Alguien podría recomendarme o mostrarme una validacion completa en AJAX para prevenir estos ataques?


y esto lo confirma! XD

primero ofuscar javascript de nada ayuda, oscuridad no es seguridad, a fin de cuenta si el navegador lo puede entender un usuario con suficiente conocimiento (como quien vaya a querer explotar vulnerabilidades) lo podrá entender, usando al navegador para que lo traduzca...

segundo en cliente no se hace seguridad, en cliente se hacen metodos para el usuario y su interaccion, puedes hacer una "seguridad" basica pero es para la apreciacion del usuario, no nada sensible ya que todo lo de cliente es perfectamente modificables y falsificable...

la seguridad se hace en servidor...

por otro lado, php y asp en seguridad practicamente no tienen diferencia, sin embargo php es codigo abierto y muhco mas usado (mas del 80% de las paginas en internet) asi que la comunidad de php constantemente está en búsqueda de errores, correcciones y optimizaciones. tiene mas apoyo de la comunidad de foss asi que puedes conseguir mas ayuda, mas librerías, frameworks y otras cosas...


primera vez que escucho tal argumento en mas de 10 años XD


Título: Re: Seguridad: Como puedo validar el filename en AJAX?
Publicado por: Citrusl en 2 Diciembre 2019, 01:39 am
Realmente no soy un experto en esto de la web, siempre fui más amante del C/C++ dios como lo extraño.

Creo que lo que busco está en este libro:
https://books.google.com.ar/books?id=hi5GSxAm564C&pg=PA132&lpg=PA132&dq=ajax+filename+secure+validation&source=bl&ots=ye9NYhlvek&sig=ACfU3U0XJg1-dr5E36uzCyZ23uPgdPRs1Q&hl=en&sa=X&ved=2ahUKEwjR3OWSpZXmAhVBCrkGHZHSAYkQ6AEwAXoECAoQAQ#v=onepage&q=ajax%20filename%20secure%20validation&f=false

vi algunos ejemplos donde filtran por caracteres especiales y doble extensión pero sospecho que no esten completos.

Creo que en PHP lo hacen asi:

Código:
if(preg_match('/^[a-z0-9-]+\.ext$/', $file)) {
    // .. upload
} else {
    echo 'The file "' . $file . '"was not uploaded. The file can only contain "a-z", "0-9" and "-". Allso the files must be lowercase. ';

}

En otros ejemplos más profesionales hasta abrían el archivo y lo leían en búsqueda interna si era posible, como string o hexadecimal.

Realmente la seguridad del servidor la maneja otro equipo del cual no confío ni tengo mucho acceso. Y bueno quería hacer lo posible del lado front-end cliente.
Es del estilo mobile por lo que no nos dejan utilizar muchos paquetes o aplicativos pesados para ahorrar en performance.
El desarrollo de la aplicación se valua en 1.8Millones aprox.


Título: Re: Seguridad: Como puedo validar el filename en AJAX?
Publicado por: engel lex en 2 Diciembre 2019, 02:00 am
Citar
El desarrollo de la aplicación se valua en 1.8Millones aprox.


ehmm.... mejor no digas el nombre XD ya estás en valor legal de ser denunciao por difamacion a la marca XD 1.8 millones de euros/dollares, el equipo de programacion y seguridad no confian entre ellos  y el equipo de programación tiene dudas de seguridad que requieren ayuda externa... bueno no nos extendamos XD



bueno en resumen aunque sea en movil, la seguridad de cliente es solo decorativa... te lo digo porque tengo experiencia trabajando en ambas partes (protegiendo y sacando datos)

Código:
if(preg_match('/^[a-z0-9-]+\.ext$/', $file)) {
    // .. upload
} else {
    echo 'The file "' . $file . '"was not uploaded. The file can only contain "a-z", "0-9" and "-". Allso the files must be lowercase. ';

}

el ejemplo entre lo que cabe está completo preg_match es solo para verificar si la expresión en regex coincide con el texto... asi que es solo corregir el regex a los casos específicos y listo...


Título: Re: Seguridad: Como puedo validar el filename en AJAX?
Publicado por: Citrusl en 2 Diciembre 2019, 02:21 am
Gracias Engel Lex!

Veré como sigue la cosa mañana,

Dejo link del libro por si alguien se enfrenta a lo mismo (descarguen y archiven antes de que lo quiten) No estoy a favor de la descarga pirata de libros además de adorar los físicos por sobre los digitales pero si te encuentras en aprietos económicos o eres fan y hacen de tu pasión un negocio aquí va gratis:

http://index-of.es/Programming/Ajax/O'Reilly%20Securing%20AJAX%20Applications.pdf

Saludos!!


Título: Re: Seguridad: Como puedo validar el filename en AJAX?
Publicado por: engel lex en 2 Diciembre 2019, 02:31 am
excelente libro, ese hace tiempo orelly lo tuvo gratis para descarga durante una semana :P

de nuevo insisto... la seguridad de lado de cliente es solo pantomima, asegura del lado de servidor... incluso en una aplicacion en java o c++ se pueden capturar los datos que salen (por muy asegurados que salgan, puedes manipularlo para que puedas leer los datos) para entender el protocolo y hacer una aplicacion que simule ser la original pero con malas intenciones


sobre el stack es decisión gerencial pero yo recomendaría 1000 veces primero php con un buen framework (ej. codeigniter) que asp ya que el framework (si es uno bueno) te da toda una capa de seguridad y de manejo de datos de forma segura sobre php y funciones extra optimizadas para facilitar el trabajo


sobre el php depende de la aplicacion algo que se hace es colocarle un nombre "al azar" al llegar al servidor y por medio de base de datos se asocia, asi evitas problemas mayores...

el nombre del archivo no es el unico peligroso, el contenido tambien, así que cuidado con ello