2010-06-22 39 views
5

Justo ahora estoy escribiendo un proyecto y deseo escribirlo con las solicitudes jquery y ajax.Seguridad de las solicitudes AJAX

única cosa, no sé, ¿es lo suficientemente seguro?

por ejemplo, cuando verifico el nombre de usuario, al registrar nuevo usuario, yo uso petición ajax jquery,

Me da la variedad de nombres de usuario existentes de dB (con JSON), y luego verificar si new_username no inArray() de los existentes username s, realizo otra solicitud y registro al usuario.

pero ¿qué pasa con la seguridad? Meybe hacker puede encontrar la manera de cambiar algunas de mis declaraciones if-else, y todo mi securite se frenará.

¿me ayudarás a comprender esta situación?

Gracias

+1

muchas gracias por la discusión interesante. y tal vez conoces los métodos para cambiar el script del lado del cliente? ¿hay herramientas para eso? – Simon

Respuesta

6

¿Por qué están poniendo en práctica cualquier de ese lado del cliente?

Usted debe enviar el nombre de usuario/contraseña a través de HTTPS en una consulta AJAX y recibir la respuesta del servidor con sólo los datos necesarios para que el usuario seguir adelante, no toda la lista de nombre de usuario.

Incluso dejando de lado la seguridad, ¿qué pasa si tienes millones de usuarios? ¿Vas a enviar esa lista a todos los clientes para que inicien sesión?

+0

Incluso al usar HTTPS, no enviaría esa lista completa al usuario; si los visitantes pueden ver esa lista (usando cualquier herramienta) pueden ver quién se registró en su sitio. Además, no confíe únicamente en la validación del lado del cliente; es fácil omitir JavaScript. –

+0

es solo un ejemplo, solo trato de entender el funcionamiento de jquery desde el punto de vista de seguridad (lo siento por los errores del idioma inglés :) – Simon

+2

Solo tenga en cuenta que todo lo que haga en el cliente puede ser modificado y visto por el usuario. Cada vez que necesite realizar una operación segura, debe hacer que el servidor verifique. –

12

(En la siguiente Asumo, que el username es el ID con la que un usuario puede iniciar sesión, no algún tipo de apodo;))

  1. Conseguir que todos los nombres de usuario como JSON es mala . ¡Entonces un atacante obtiene todos los nombres de usuario registrados inmediatamente!
    Simplemente envíe el nombre de usuario al servidor, valídelo allí y envíe "válido" o "no válido" como respuesta. Es decir, verifique la disponibilidad en el lado del servidor .

  2. Siempre validar la entrada del usuario en el lado servidor. JavaScript puede ser deshabilitado.

Actualización:

No importa si se trata de jQuery o no. Todo lo que usted envíe al cliente (y no es hash o cifrado ) puede ser leído por el cliente, no importa si es un XMLHttpRequest o una solicitud de "normal".

¿Enviaría una tabla HTML con todos los nombres de usuario a cualquier visitante de su sitio?Espero que no :)


Resumen:

  • enviar sólo los datos, que se permite que el cliente tenga acceso.
  • Valide la entrada del usuario en el lado del servidor.
  • Nunca confíes en la entrada del usuario.
+2

+1 para la tabla HTML! : D –

+0

no, lo envío como una lista, no como una tabla: D – Simon

+0

Por cierto, conozco muchos sitios que envían todos los nombres de usuario al visitante; se llama 'lista de miembros' en muchos foros. [Incluso SO lo hace] (http://stackoverflow.com/users) ;-) –

2

La seguridad es una de esas cosas que mejor se hace del lado del servidor si es posible. Mi enfoque típico para el inicio de sesión AJAX es enviar el nombre de usuario y una contraseña hash MD5 o SHA1 a un método en el servidor que se encargará de todos los detalles de inicio de sesión. Los detalles de esa implementación realmente dependerán de su tecnología del lado del servidor, pero la mayoría de los marcos de aplicaciones web cuentan con las instalaciones necesarias para hacerlo. Incluso puede haber algunas soluciones que incluyen bibliotecas de Javascript para manejar el trabajo del lado del cliente también.

5

Ajax no reemplaza el código del lado del servidor. Si bien es posible implementar la funcionalidad de inicio de sesión y registro utilizando ajax, aún deberá validar y almacenar datos en el servidor.

Una implementación más sensata simplemente enviaría una solicitud https al servidor que contiene el nombre de usuario y la contraseña a la que el servidor respondería con un yay o no.

+0

Ajax no reemplaza el código del lado del servidor <<< THIS !!! – Incognito

Cuestiones relacionadas