Envío de datos de un formulario HTML

Si se simplifica el funcionamiento de las páginas web se podría definir como la metodología "cliente/servidor", la cual consiste en que un "cliente", la mayoría de los casos un navegador, realiza una solicitud al servidor solicitando los datos requeridos para llevar a cabo una acción; a su vez, el servidor retorna una respuesta hacia el cliente con dichos datos. Por su lado, todas estas consultas y respuestas son enviadas a través de ciertos "protocolos" de transmisión de datos; en general, uno de los más simples y estandarizados en la web es el protocolo HTTP.

En ese sentido, un formulario no es más que un mecanismo simple para que el usuario pueda realizar una consulta o enviar datos hacia un servidor a través del protocolo HTTP; de hecho, básicamente todos los atributos de un formulario van enfocados a configurar la solicitud que se realizará. A su vez, los formularios poseen dos atributos en particular los cuales están enfocados en definir de qué forma se enviarán los datos hacia el servidor; estos atributos son:

Nota: Es posible realizar una solicitud al servidor utilizando el método HTTPS (HTTP encriptado) desde una página no segura sin mayor inconveniente, ya que el HTTPS cifra los datos al enviarlos. Sin embargo, en el caso de que desde una página segura se pretenda realizar una consulta desde el protocolo HTTP sin encriptar los datos, todos los navegadores deberían disparar una alerta al usuario, ya que los datos no encriptados son vulnerables a ser interceptados por terceros.

Nota: Si se da la necesidad de enviar una gran cantidad de datos a un servidor lo más recomendable es emplear el método POST, ya que algunos navegadores y servidores asignan un límite a las URL que aceptan y, ya que este se trata del mecanismo para enviar los datos con el método GET, se podría producir un error en estos casos.

Visualizar consultas HTTP

Por lo general las consultas HTTP de una página web no se muestran al usuario en ningún punto del envío de datos; por lo tanto, para poder visualizarlas es necesario el uso de herramientas especializadas como lo son Firefox Network Monitor y Chrome DevTools. Sin embargo, pese a que estas herramientas ofrecen una variedad de opciones al emplearlas en cuanto a lo que es la visualización de las consultas HTTP, también es posible visualizarlas desde las herramientas de desarrollador de Google Chrome. Los pasos para poder visualizar las consultas son los siguientes:

  1. Realizar clic derecho y se selecciona "inspeccionar elemento".
  2. Se selecciona la pestaña "Red (Network)".
  3. Se selecciona el filtro "Todo (All)".
  4. Se refresca la página.
  5. Se selecciona la consulta HTTP en el panel izquierdo; los datos se mostrarán como una ventana emergente.

Un ejemplo de esto sería:



Visualizar Consultas HTTP del lado del servidor

Es necesario recordar que HTML es un lenguaje de programación limitado a estructurar páginas web; por lo tanto, se trata de un lenguaje de programación básico en el ámbito frontend. No obstante, dado que los datos son enviados a través del protocolo HTTP desde el formulario de nuestra página hacia el servidor, visualizar los datos recibidos en este no está dentro de las capacidades de HTML, ya que este lenguaje únicamente es interpretado por los navegadores; por lo tanto, para visualizar e interactuar con los datos de la consulta es necesario utilizar otros lenguajes de programación, en particular aquellos que tengan un carácter Backend. Un ejemplo de estos son:

Caso Especial

Si se da el caso de que sea necesario enviar un archivo con un formulario HTML tendremos que tomar en cuenta cierto aspecto del protocolo HTTP: este se trata de un protocolo de texto. Esto es ideal cuando enviamos datos comunes ya que la mayoría de estos también son datos de texto; sin embargo, la cosa cambia cuando enviamos un archivo, ya que este se trata de datos binarios; por lo tanto, es necesario cumplir con ciertos requisitos antes de que sea posible realizar el envío del archivo en cuestión.

Atributo Enctype

Para este tipo de casos existe el atributo "enctype". Este atributo es realmente importante ya que se encarga de definir el valor del encabezado del tipo de contenido incluido en la solicitud HTTP; en otras palabras, le indica al servidor qué tipos de datos está recibiendo. Su valor por defecto es application/x-www-form-urlencoded, lo que significa "estos son datos de formularios que han sido codificados en parámetros de URL".

Por lo tanto, si se desea enviar archivos a través de un formulario HTML es necesario realizar tres pasos adicionales:

  1. Enviarlo a través del método POST, ya que no es posible codificar un archivo a formato URL para enviarlo a través del método GET.

  2. Definir el valor del atributo "enctype" como multipart/form-data, ya que de este modo los datos se dividirán en varias partes: una para cada archivo enviado, a la vez que una para los datos de texto que pudiesen ser enviados con el formulario.

  3. El tercero es el más lógico: se trata de incluir en el formulario al menos un controlador del tipo archivo (input type="file") para permitir que los usuarios seleccionen los archivos por enviar.

Por ejemplo:

Nota: Si es necesario, es posible configurar al servidor con un límite de tamaño en los archivos por enviar, para evitar que los usuarios puedan intentar abusar de la página.

Seguridad

Siempre que se realice algún tipo de envío de datos hacia nuestro servidor, esto se puede convertir en una vulnerabilidad que terceros pudiesen aprovechar para atacar nuestra web. La vulnerabilidad en sí no proviene del formulario HTML, sino que proviene de cómo son manejados los datos por nuestro servidor.

Pese a que la seguridad web no es un tema que HTML sea capaz de abordar, existen ciertas reglas al plantearse la seguridad de una web. La base de todo es desconfiar de todos los usuarios incluyendo de nosotros; después de todo, incluso nuestro usuario pudiese llegar a ser suplantado. Aparte de eso, es necesario considerar que los formularios son los centros de la mayoría de ataques a una web, por lo que todos los datos que sean enviados al servidor deben ser chequeados sin ninguna excepción.

Las tres reglas son:

Siguiendo estas tres reglas es posible protegerse contra la mayoría de las vulnerabilidades de una página web; sin embargo, no es suficiente con esto. Lo recomendable es siempre buscar un tercero experimentado que chequee la seguridad de la página, ya que de ese modo se pueden encontrar nuevos puntos débiles de los cuales antes no se tenía conciencia.

Nota: se puede leer más acerca de la seguridad de nuestra web en este enlace.