Blazor

Abuso de Bots y cómo defenderse

Es común que al desarrollar una aplicación Web, cuentes con uno o más formularios para registrar usuarios, inicios de sesión, o datos de contacto, destinados para ser almacenados en algún repositorio, como una base de datos, archivos XML o JSon, entre otros.

Peter ParamAug 05 25

Pero, desafortunadamente, Internet está infestada de usuarios maliciosos que intentan dañar el esfuerzo de los demás, simplemente por satisfacción. Es por ello que a lo largo de los años, ha existido una competencia interminable de talento entre desarrolladores productivos y desarrolladores destructivos.


Identity

En el caso particular del marco .Net Core, Microsoft ha evolucionado continuamente sus esquema de seguridad de Identity, incluyendo las nuevas tendencias y tecnologías propias del desarrollo de aplicaciones Web Modernas que adoptan esquemas probados y aceptados de manera internacional. Tal es el caso de Autenticación Multifactor, y con el uso de Cokies y/o Tokens, así como de algoritmos con llaves públicas y privadas.

Para contar con las librerías de Identity en tu aplicación web, debiste haberla creado con la instrucción:

  dotnet new webapp -o MiAplicacion -au Individual

O podrás incorporarla posteriormente con la instalación de scaffolding:

  dotnet aspnet-codegenerator identity -au Individual

Una vez que cuentes con la incorporación de Identity, tu aplicación ya está estructurada y protegida ya que el proceso de registro de usuarios se realiza en dos pasos, asegurando con ello que los usuarios verifiquen la autenticidad de su cuenta de correo.

Asimismo, con la finalidad de incrementar la seguridad, Identity cuenta con la modalidad de autenticación de 2 factores (2FA), empleando aplicaciones de autenticación populares como Google Authenticator y Microsoft Authenticator.

Sin embargo, lamentablemente esto no es suficiente para que tu sitio esté libre de abuso y ataques mal intencionados. En ese caso, se deberá acudir a otras técnicas de defensa como el verificar en primera instancia las reglas de seguridad del Firewall de tu Host, reforzar las validaciones en tus formularios, y sobre todo, el empleo de Captchas.


Captchas

Esta última técnica, basada en la prueba de Turing, es capaz de distinguir la respuesta de un humano y de un bot. Por lo general, un bot dirige los pixeles en forma recta, horizontal o vertical, a diferencia de las personas que realizamos un camino aleatorio al dirigirnos a un elemento de el DOM como un Input Text, por ejemplo.

Existen diferentes soluciones de Captcha, pero quizá las más empleadas son las diferentes versiones que Google ofrece. 

Actualmente se utilizan las versiones 1 y 2, que generan una ApiKey con un par de claves, pública y privada, para la comunicación entre el backend de tu aplicación con con el servidor de reCaptcha.

Desafortunadamente, el empleo de Captchas tiene un efecto negativo en la experiencia del usuario, que inclusive podría provocar renunciar a visitar un sitio. Pero, la seguridad está ante todo.

Google recientemente liberó la versión 3, que ya no requiere intervención humana y se basa principalmente en registro estadístico y analítico del tráfico a tu sitio, con el fin de identificar si el visitante es humano o robot, eliminando con ello la mala experiencia de los visitantes.

Al margen del tipo de Captcha que decidas utilizar, sigue siendo una técnica simple para desalentar las malas intenciones de los informáticos destructivos, y evitar el daño provocado por bots, por lo que vale la pena incluirlos en tus formularios.


Blazor rendering

Si tu aplicación esta desarrollada con Blazor, debes tener en cuenta que la renderización es un factor importante para la correcta representación de los componentes Captcha, ya que la gran mayoría incluyen funciones de Javascritp que se deben ejecutar en el lado del cliente.

Si el modo de renderización es InteractiveServer, es muy probable que no se logre una respuesta efectiva con la API. En ese caso, considera la posibilidad de renderizar previamente.

Aunque la pre-renderización está considerada por defecto, si especificas el modo interactivo se perderá la representación inicial pudiendo ocasionar un funcionamiento erróneo del Captcha.

Considera volver a activar la representación previa con la directiva:

  @rendermode @(new InteractiveServerRenderMode(prerender: true))


Conclusión

Tus aplicaciones publicadas no están exentas de ser objeto de ataque por usuarios maliciosos, por lo que deberás establecer diversas técnicas de defensa para evitar los daños. Las recomendaciones comunes consisten en reforzar reglas de seguridad y reglas de validación en formularios, así como emplear el uso de Captchas.

Elije el que mejor se adapte a tu tipo de aplicación y público objetivo, y considera que la mayoría de estás técnicas emplean funciones javascript y el empleo de APIs para comunicarse con un servidor que valida la existencia o no de un bot. Suerte!

Comentarios (0)  
Suscríbete al Blog
Obtén las últimas noticias en tu correo!

Leer siguientes

SignalR: modificar el tamaño del mensaje.

El uso de Websockets es una excelente opción para comunicación fullduplex entre cliente – servidor, pero, tiene una limitación considerable: el tamaño del mensaje de SignalR.

Moisés Macías Aug 06 24

Abuso de Bots y cómo defenderse

Peter Param in Blazor, Aug 05 25
An unhandled error has occurred. Reload 🗙