Wextensible

Nueva sección de comentarios para este sitio

Comentarios en un sitio web

Comentarios web

Por fin implemento la sección de comentarios en las páginas de este sitio. En principio no voy a exponer detalles de implementación porque quiero probarlo un tiempo y ver que problemas o mejoras aparecen. Ahora aquí sólo voy a presentar estas secciones y comentar algunas cosas que se me plantearon al empezar con la implementación. Para llevar a cabo una sección de comentarios necesitamos básicamente dos cosas, una es un sistema de almacenamiento en el servidor y la otra es un formulario en el navegador para enviar los comentarios. Dos cosas muy simples, pero que se complican al considerar aspectos de seguridad y autenticidad del usuario.

Como formulario para enviar los comentarios he usado el que explico en la serie de temas PHP formularios seguros. Se trata de un formulario que valida los datos en el navegador y luego en el servidor, componente que ya estoy usando desde hace tiempo en las páginas de contacto y buscador. Incorpora un captcha para evitar recibir spam al menos de una forma automatizada.

Cada comentario tiene como mínimo tres campos: una fecha, el propio comentario y el usuario. Y es en este último campo donde me encuentro con la mayor dificultad. Se debería crear un sistema de usuarios registrados. Así cuando un usuario se registra guardamos en el servidor algunos datos personales, como mínimo un nombre de usuario y una contraseña. Luego en la página le pediremos que se autentique para poder comentar. Este es el sistema óptimo, porque los nombres de usuarios serán únicos y además podemos hacer un seguimiento de uso de los comentarios, bloqueando usuarios si no siguen unas buenas normas de uso.

Pero un sistema de autenticación requiere de una comunicación más segura que la simple HTTP. Porque si el usuario envía su contraseña por la red alguién podría captarla y usarla para autenticarse. Tendríamos que usar HTTPS que crea un canal cifrado para cuando alguién intercepte la comunicación ésta sea ininteligible.

He visto páginas con comentarios que con solo HTTP pueden usar otros sistemas para garantizar la autenticidad del usuario. Por ejemplo registrándose con el usuario de una red social, conocido como social login. Otra forma podría ser solicitar con cada comentario una dirección de email. En el servidor podríamos chequear si el email existe.

No voy implementar HTTPS porque no es gratis y no estoy actualmente obteniendo ingresos de este blog. Por ejemplo en 1and1 (donde ahora está alojado este sitio) cuesta unos 7 € mensuales. En todo caso tanto con HTTPS como usando los social login u otras formas requeriría un estudio más profundo para conocer las técnicas que hay detrás, pues me niego a usar algo que no sepa cómo funciona. Por ahora no quiero complicarme tanto y será finalmente un sistema de comentarios sin que sea obligatorio el registro del usuario. Como ventaja podemos decir que facilita la decisión de comentar de un usuario, pues habrán muchos que no comentarán para evitarse el a veces molesto proceso de registro y tener que recordar "otra contraseña más".

La gestión de la sección de comentarios

Una cuestión importante de una sección de comentarios es su gestión y mantenimiento. Si implemento esa sección en todas las páginas de este sitio, tendría que haber un sistema que me alerte de nuevos comentarios. Pues habrá que responderlos si fuera el caso o borrarlos si no obedecen a unas normas de buen uso. En definitiva, se precisa una gestión de los mismos. Dado que es imposible revisar todas las páginas del sitio en busca de comentarios nuevos, una forma sería consultar el almacén de datos del servidor donde se guardan los comentarios. Pero esto no es operativo.

La solución final es que el sistema me remita un email por cada comentario enviado al servidor. En el email puedo ver en que página se produjo y resto de detalles del comentario para decidir que acción realizar. Además ese seguimiento lo podría hacer con mi teléfono móvil donde ya tengo el correo instalado.

Pensé entonces en aprovechar el propio comentario para enviar comandos de gestión para hacer cosas como bloquear y desbloquear usuarios, borrar comentarios e incluso asegurar que nadie pudiera utilizar el nombre de usuario que yo eligiría para comentar. Esto al final me llevó a crear el sistema de usuarios registrados que se explica en el siguiente apartado.

Asegurar la autenticidad del usuario sólo con HTTP

Aunque puede comentar sin registrarse, este sistema también permite usuarios registrados. El objeto es entonces asegurar la autenticidad del usuario. Para esto necesitamos que el usuario pruebe que es quien dice ser. No podemos usar una contraseña pues estamos usando HTTP. Se basará en un proceso de claves de un sólo uso y un segundo canal de autenticación.

Lo que comento a continuación está ya implementado con esta nueva sección de comentarios, pero aún esta en fase de pruebas. No ofrezco la posibilidad de registro porque antes tengo que asegurarme de la operatividad y funcionalidad del sistema probándolo durante un tiempo.

Para lograr esto tengo un archivo con una lista de usuarios. Cada uno tendrá un nombre de usuario y su dirección de correo . La primera vez que entre en el sitio a comentar pondrá su nombre y enviará una petición de inicio de sesión. El servidor le enviará a su email una clave de acceso de un sólo uso. El insertará esta clave al inicio del texto de un nuevo comentario y lo remitirá al servidor. Este comprobará que esa clave es igual a la que previamente le había enviado, desechará la primera línea y grabará y publicará el resto del texto, enviándole a continuación un nuevo email con una nueva clave regenerada y con los detalles del comentario publicado.

Dado que la clave se envía por HTTP alguién podría capturar la clave, pero dado que es de un sólo uso sólo le serviría para modificar el actual comentario que ha capturado. Además como al usuario se le enviaría a su email una nueva clave con el comentario publicado, detectaría que ha sido suplantado si el texto fue modificado. Con no seguir comentando como usuario registrado se solventaría el problema futuro. El comentario ya publicado podría ser borrado por el administrador de la sección.

Podemos reforzar más lo anterior para evitar la publicación de comentarios modificados por alguién que los intercepte en la red. Se trata de hacer este proceso en dos fases. En la primera se envía el comentario que el servidor guardará en una variable de sesión, pero aún sin grabarlo y publicarlo. Se le enviará un email al usuario para que confirme dicho comentario. Si el texto fue antes modificado por el camino, el usuario ahora lo verá en su email y no enviará la confirmación. El comentario se queda en la variable de sesión y es eliminado tras una nueva acción o cuando la sesión expire, pero nunca será publicado.

Obviamente este sistema es lioso para un uso generalizado pues hay que estar manejando el email constantemente. Además la seguridad de este sistema es limitada, pues si la comunicación está interceptada lo sabremos y evitaremos que se lleve a cabo la acción, pero no habrá forma de evitar esa intercepción. Con HTTPS también podrían interceptarse las comunicaciones pero su seguridad se basa en que la información interceptada es ininteligible.

En resumen, siempre que se pueda es mejor utilizar HTTPS y un sistema basado en registro de usuarios. Pero mientras tanto probaré estas solución para ver como se comporta en una situación de producción y especialmente para enviar comandos de gestión de comentarios.