Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Atacando Aplicaciones, APIs, Apps Móviles, Servidores Redes, Dispositivos IoT
SCI: Sistemas de Control Industrial
COS: Centro de Operaciones de Seguridad

Implementar reCAPTCHA

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en ASP.NET al implementar sistemas de recaptcha. Para mejorar la seguridad en la aplicación es recomendable restringir el uso de la misma únicamente a humanos mediante el uso de CAPTCHAS.

Necesidad

Validación de llenado de formularios por un ser humano en ASP.NET.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se cuenta con una aplicación web desarrollada con ASP.NET.

  2. Se tiene una cuenta en el servicio on-line reCAPTCHA [2].

  3. Se desea validar que el usuario de la aplicación sea un humano.

Solución

Para evitar posibles brechas de seguridad en el sistema, es recomendable garantizar que únicamente los humanos puedan llenar los formularios de la aplicación. Una forma de lograr esto es utilizar un CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart). Al utilizar pruebas de reconocimiento de letras e imágenes, es posible distinguir si el usuario es un humano o un robot. En esta aplicación mostraremos cómo utilizar la librería reCAPTCHA de ASP.NET para evitar que los bots envíen formularios a nuestra aplicación, restringiendo su uso únicamente a humanos. Para ello debemos seguir la siguiente serie de pasos:

  1. Descargar la librería reCAPTCHA de ASP.NET [1]-

  2. Se agrega la Referencia a Recaptcha.dll en el proyecto.

  3. Dentro de la página, definimos el lenguaje a usar, y luego asociamos el namespace de reCAPTCHA con el tagprefix.

    captcha-validation.cs
    1
    2
    <%@ Page Language="C#" %>
    <%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>
    
  4. En el evento clic del botón usado para enviar el formulario, verificamos la propiedad IsValid del objeto Page. En nuestro ejemplo modificamos las propiedades de un Label para mostrar si es o no correcto el CAPTCHA.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    <script runat="server">
      void btnSubmit_Click(object sender, EventArgs args) {
        if (Page.IsValid) {
          lblResult.Text = "CAPTCHA is correct!";
          lblResult.ForeColor = System.Drawing.Color.Green;
          } else {
            lblResult.Text = "Incorrect";
            lblResult.ForeColor = System.Drawing.Color.Red;
            }
          }
    </script>
    
  5. Completamos el código HTML del sitio:

    mypage.html
    1
    2
    3
    4
    5
    <html>
    <head>
    <title>ReCAPTCHA Test</title>
    </head>
    <body>
    
  6. Creamos un formulario al cual le incluimos el control de reCAPTCHA, reemplazando XXXXX y YYYYY por nuestro PublicKey y PrivateKey respectivamente.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
      <form id="Form1" runat="server">
        <asp:Label Visible="true" ID="lblResult" runat="server" />
        <recaptcha:RecaptchaControl
          ID="recaptcha"
          runat="server"
          Theme="red"
          PublicKey="XXXXX"
          PrivateKey="YYYYY"
        />
        <br />
        <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />
      </form>
    
  7. Por ultimo cerramos las etiquetas HTML que teníamos abiertas.

    1
    2
    </body>
    </html>
    
  8. A continuación vemos el formulario en funcionamiento con el control de reCAPTCHA:

    Control reCAPTCHA
    Figura 1. Apariencia del control reCAPTCHA
  9. Posteriormente procedemos a validar su funcionamiento verificando que el comportamiento sea el esperado.

  10. En caso de que usuario realice el CAPTCHA satisfactoriamente se mostrará un mensaje indicando esto, y se podrá proceder al envío del formulario. A continuación se muestra en la figura, el escenario descrito anteriormente:

    reCAPTCHA realizado exitosamente
    Figura 2. reCAPTCHA exitoso
  11. Si por el contrario, el reCAPTCHA falla, se mostrará un mensaje de error y se pedirá al usuario volver a intentarlo. A continuación se muestra en la figura, el escenario descrito anteriormente:

    reCAPTCHA fallido
    Figura 3. reCAPTCHA Fallido
  12. De esta manera, se garantiza que el formulario sea enviado sí y sólo si el CAPTCHA es realizado exitosamente, mejorando la seguridad del sistema al prevenir posibles ataques de bots a la aplicación.




Haz un comentario

Estado de los servicios - Términos de Uso