Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + Tecnología especializada
DXST - SAST - IAST - SCA - DevSecOps
Caja blanca - Caja gris - Caja negra
Atacando Aplicaciones Web, APIs, Apps Móviles,
Cliente Servidor, Servidores, Redes, Dispositivos IoT
IoT SCI: Sistemas de Control Industrial

Validar redirecciones a páginas web

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en ASP.NET al validar los campos de entrada de las aplicaciones web evitando que usuarios malintencionados hagan uso de expresiones regulares para atacar la aplicación.

Necesidad

Se requiere reenviar la solicitud de un cliente a una página que expone la aplicación web.

Contexto

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

  1. La aplicación esta desarrollada en ASP.NET.

Solución

Para redireccionar la solicitud de un usuario a una web que expone la aplicación, ASP.NET proporciona el método Response.Redirect. Para implementar ésta funcionalidad en la aplicación se debe tener en cuenta los siguientes aspectos [1]:

  1. Evite el uso de parámetros manipulables por el usuario para definir el destino. En su lugar, establezca el destino mediante una dirección URL (Uniform Resource Locator) predefinida en la aplicación. Por ejemplo, en el siguiente código:

    MyPage.html
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    <form action="redireccionar-a-una-pagina.asp" method="get">
     <label for="url">Dirección a donde quieres ir:</label>
     <input type="text" size="40" id="url" name="url">
     <input type="submit" value="Enviar">
    </form>
    <%
     url = Request.QueryString("url")
     Response.Redirect (url)
    %>
    
    . Reemplace +Response.Redirect (url)+ por
    +
    [source, html, linenums]
    <%
      Response.Redirect ("https://www.google.com")
    %>
    
  2. Si se requiere el uso de algún parámetro para establecer la dirección de destino, considere validar el contenido enviado en el parámetro. Para realizar ésta validación se recomienda hacer uso de expresiones regulares. Las expresiones regulares son usadas dentro de las aplicaciones ASP.NET para limitar la entrada de datos no confiables evitando que un atacante pueda inyectar código malicioso. El soporte para las expresiones regulares está disponible en las aplicaciones'ASP.NET haciendo uso del control RegularExpressionValidator [2] y la clase Regex. Éstas se pueden encontrar en el espacio de nombres System.Text.RegularExpressions.

  3. Para validar la entrada de datos en el lado del cliente agregar un control RegularExpressionValidator en la pagina ASP.

  4. Establecer la propiedad ControlToValidate para indicar cual será el control a validar.

  5. Establecer la propiedad ValidationExpression a una expresión regular correspondiente.

  6. Establecer la propiedad ErrorMessage para definir el mensaje que se mostrará si la validación falla. El siguiente código muestra como se implementa este control a un campo de texto:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <%@ language="C#" %>
     <form id="form1" runat="server">
       <asp:TextBox ID="url" runat="server"/>
       <asp:Button ID="btnSubmit" runat="server" Text="Submit" />
       <asp:RegularExpressionValidator ID="regexpName" runat="server"
         ErrorMessage="This expression does not validate."
         ControlToValidate="url"
         ValidationExpression="^[a-zA-Z'.\s]{1,40}$" />
     </form>
    
  7. La expresión regular utilizada en el ejemplo de código anterior limita un campo de nombre de entrada para los caracteres alfabéticos (mayúsculas y minúsculas), caracteres de espacio, las comillas simples y el carácter de punto. Además, la longitud del campo está limitada a 40 caracteres.

  8. Para validar la entrada de datos en el lado del servidor se debe utilizar la clase Regex del espacio de nombres System.Text.RegularExpressions.

  9. Codifique el valor del parámetro que es utilizado para establecer la dirección de destino a formato URL. Para realizar esta codificación se debe emplear el método encode.

[source, html, linenums]
<%
  response.write(Server.URLEncode("https://www.google.com"))
%>



Haz un comentario

Estado de los servicios - Términos de Uso