Asincronía vía AJAX vs refresh browser

kraneok

Que tal gente, hoy vengo a exponer un debate mas que una duda y de esta forma intentar aprender un poco todos de todos, de como trabajos en ciertas ocasiones.

Como bien reza el título, llega algún momento, cuando estamos programando sistemas web, tanto backend como frotend, en que le damos vueltas y empezamos a poner en balanza pros y contras de utilizar, como ya he dicho, la asincronía que AJAX nos brinda.

Cuando estamos programando el frotend de un sistema web, en muchas ocasiones se nos viene a la mente utilizar el muy ya conocido framework JavaScript jQuery, el cual nos abstrae muchísimo de tener que lidiar con XMLHttpRequest trabajando directamente con AJAX, tecnología construida sobre este objeto.

Dentro ya de AJAX y del uso de jQuery como construcción de formularios de validación de cualquier tipo, nos encontramos con algunos puntos que, a mi parecer no me gustan mucho.

Por un lado podemos detectar como un código interpretado como lo es JavaScript deja al ojo muchísimas cosas, que, aunque posteriormente sean validad en backend, quizás sea una información algo sensible, ¿ nombre de variables ?, ¿ nombre de objetos PHP y miembros de la interfaz de este ?.

Sin embargo, en algunos momentos es preferible ponerse en el punto de vista del cliente que hace uso de dicho sistema, ¿ como ?, ¿ prefiere un cliente una web que no se esté refrescando casi con cada cambio de sección, o requisito funcional del mismo sistema ?, ¿ prefiere validaciones sin refrescos ?, etc.

A donde quiero llegar es a esta pregunta, ¿ se debe comprometer algo de seguridad del sistema por brindad a los usuarios del sistema, un sistema algo mas usable ?.

Siempre debemos tener en cuenta que en backend también se validan los datos que se envían por el protocolo http, y que si alguno está fuera de lo que se desea como válido, el sistema tira todo para abajo.

Un saludo.

naete

Las validaciones en el lado del cliente son como si no hubiese. Se comprueba en el server sí o sí. En estos casos de seguridad hay que ser estricto, si no, te la cuelan (y aun así lo hacen..)

Ajax está muy bien para actualizar cosillas y mostrar detalles y demás, pero para el resto no lo veo.

kraneok

Si, pero no me refiero en concreto a eso, haciendo validaciones en cliente ganamos en varios aspectos:

  • menos tráfico ( pues se envía todo cuando ya sabemos que es correcto, obviando que no sea un usuario ilegítimo )
  • usabilidad, pues todo se hace desde cliente y no se refresca nada hasta el momento en que realmente sea necesario, así pues, queda mas "bonito" y usable.

Pero, perdemos en que al ser JavaScript, pueden verse cosas que son sensibles y puede dar ideas a los atacantes, ¿ merece la pena pues sacrificar seguridad por usabilidad ?

1 respuesta
naete

#3 Ya te digo que yo al menos siempre hago esas validaciones vía JavaScript y cuando veo que está todo correcto lo envío al server, pero cuando llega al server lo vuelvo a mirar todo por si me han colado algo que no quiero.
Es cierto que ganas velocidad en no tener que ir y volver al server para validar pero ten en cuenta que no es del todo fiable.

Respecto a lo bonito no puedo negártelo y lo de la pereza de refrescar tampoco XD

bLero

Validación en el cliente y en el servidor, así es como debe ser.

Para los casos en los que no se pueda validar en el cliente porque es una regla de negocio de la aplicación (por ejemplo que el nombre de usuario no esté repetido), pasas la petición con Ajax a la capa de negocio que hace la validación y te redirige (patrón PRG) a otra página en caso de éxito, o te deja en la misma mostrando los mensajes de error correspondientes.

De esta forma no se compromete la seguridad de ninguna forma, y el sistema sigue siendo usable.

1 respuesta
kraneok

#5 Básicamente es así como lo hago, por ejemplo, email de usuario como tu dices, primero, valido en cliente que sea un email correcto y que esté completo, si la validación la pasa, la envío a la capa negocio, valido email correcto y completo y que además exista, y todo lo que sea, en caso contrario devuelvo en json o text, o lo que sea una flag de error o si en caso contrario, todo está bien le doy paso.

Tunnecino

A ver, tampoco tienes que mostrar nada raro en los JS. Yo suelo usar AJAX para el login, validación de formularios, o whatever, y obviamente eso no quita que necesites también validar por el lado del servidor, por que cualquiera con un navegador moderno puede editar al vuelo cualquier script JS que tengas en tu sitio.

Yo no lo consideraría un sustituto a la validación por server, si no una herramienta muy útil para usar en conjunción con.

Usuarios habituales

  • Tunnecino
  • kraneok
  • bLero
  • naete