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

Filtrar Entrada de Datos Usando Expresión Regular

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en Java al filtrar entrada de datos usando expresiones regulares. Los datos de entrada de las aplicaciones deben ser validados para evitar ataques del tipos XSS, SQLi o XPATH.

Necesidad

Filtrar entradas en una aplicación usando expresiones regulares en Java

Contexto

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

  1. Se requiere implementar un control para validar la entrada de datos en la aplicación

Solución

Las expresiones regulares son usadas dentro de las aplicaciones Java para limitar la entrada de datos no confiables evitando que un atacante pueda inyectar código malicioso.

Las expresiones regulares son una buena manera de validar los campos de texto como nombres, direcciones, números de teléfono y otra información del usuario.

Se pueden utilizar para forzar la entrada (limitando el rango de caracteres de entrada), aplicar reglas de formato, y verificar longitudes.

  1. El soporte para las expresiones regulares está disponible para las aplicaciones Java mediante el uso del paquete java.util.regex, el cual contiene las clases Pattern, Matcher, y PatternSyntaxException [1].

  2. Para validar la entrada de datos, primero se debe importar las clases Matcher y Pattern del paquete java.util.regex.

    Main.java
    1
    2
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
  3. A continuación, se debe crear una instancia de la clase Pattern. Esta clase es la representación compilada de una expresión regular.

    1
    2
    3
    class Main {
      public static void main(String[] args) {
        Pattern p = Pattern.compile("^[a-zA-Z'.\\s]{1,40}$");
    
  4. La expresión regular utilizada en el código anterior limita un campo de nombre de entrada para los carácteres alfabéticos (mayúsculas y minúsculas), carácteres de espacio, la comilla simple y el carácter de punto. Además, la longitud del campo está limitada a 40 carácteres.

  5. Como paso siguiente, se crea una instancia de Matcher. Esta entrada es el producto de aplicar un patrón a una cadena de carácteres, mediante la invocación del método Pattern.matcher. Esta instancia permite realizar operaciones sobre la secuencia de carácteres que se quiere validar.

    1
    Matcher matcher = p.matcher(args[0]);
    
  6. En este caso, se está aplicando el patrón al primer argumento que reciba la aplicación.

  7. A continuación, se comprueba si la cadena de carácteres cumple o no con el patrón especificado haciendo uso del método matches.

    1
    2
    3
    4
    5
    6
    7
    8
    9
       boolean cadenaValida = matcher.matches();
       if (cadenaValida) {
         System.out.println("La cadena SI es válida");
       }
       else {
         System.out.println("La cadena NO es válida");
       }
     }
    }
    
  8. Se compila y ejecuta pasando como parámetro el argumento hola. Se puede observar que se ha clasificado la cadena como válida.

    1
    2
    3
    javac Main.java
    java Main hola
    La cadena SI es válida
    
  9. Ahora, se ejecuta pasando como parámetro el argumento hola*, con un asterisco al final; carácter que no se encuentra en la definición del patrón. Y se observa que se ha clasificado la cadena como NO válida.

    1
    2
    java Main hola*
    La cadena NO es válida
    

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

Main.java Código que valida entrada de datos por expresión regular.




Haz un comentario

Estado de los servicios - Términos de Uso