Cómo implementar y detectar ataques de inyección SQL en el programa Java Swing

Consulte el ejemplo de código en esta página: Base de datos Java y Swing: Base de datos Swing Applet

El código está plagado de vulnerabilidades de inyección SQL. Cada vez que la aplicación toma información de los campos de formulario Swing y copia esa entrada textualmente en las cadenas de las instrucciones SQL, es una vulnerabilidad. Por ejemplo:

  Sentencia de declaración = connection.createStatement ();
 int i = declaración
  .executeUpdate ("INSERTAR EN VALORES acc_acc ("
   + accountIDText.getText () + "," + "'"
   + usernameText.getText () + "'," + "'"
   + passwordText.getText () + "'," + "0"
   + "," + "ahora ())");

¿Qué sucede si el usuario ingresa una contraseña que contiene un apóstrofe? El SQL resultante tendrá un error de sintaxis porque los delimitadores de cadena de comillas simples estarán desequilibrados. Este no es un ataque malicioso: alentamos a las personas a usar símbolos de puntuación en sus contraseñas.

La forma de defenderse contra la inyección SQL en una aplicación Swing es la misma que defenderse contra la inyección SQL en cualquier otro tipo de aplicación:

Utilice declaraciones preparadas con parámetros de consulta en lugar de interpolar variables de aplicación en cadenas SQL.

  Cadena insertSql = 
   "INSERTAR EN LOS VALORES acc_acc (?,?,?, 0, NOW ())";
 Sentencia de instrucción = connection.prepareStatement (insertSql);
 Statement.setString (1, accountIDText.getText ());
 Statement.setString (2, usernameText.getText ());
 Statement.setString (3, passwordText.getText ());
 Statement.executeUpdate ();

Además de resolver las vulnerabilidades de inyección SQL, esto también hace que el código sea más fácil de escribir y más fácil de leer.

  • La INSERT SQL INSERT está en una sola línea, por lo que puede leerla más fácilmente.
  • No más esfuerzos forzados para tratar de hacer todas esas comas y citas anidadas correctamente.
  • Los captadores de campo de formulario Swing están separados de la línea con la consulta SQL.

Tenga en cuenta que los parámetros de consulta SQL solo toman el lugar de los valores en la sintaxis SQL. Es decir, donde pondría un número literal o una cadena o fecha literal entre comillas simples en el SQL. No puede utilizar parámetros de consulta para nombres de tablas o columnas o palabras clave SQL.

Estás cometiendo algunos errores. SQLi es un ataque basado en web y Java Swings son aplicaciones de escritorio. SQLi no es un ataque para la aplicación Java Swing. Tu pregunta es incorrecta.

Supongo que quiero hacer un escáner SQLi en la aplicación Java Swing donde le das el enlace Vulnerable y obtienes los resultados si este sitio es pirateable o no. En tal caso, debe tener un conocimiento sólido de Java RMI, expresiones regulares, redes Java y análisis de URL. Pero no es muy difícil. Recomendaría Python para hacer esto, ya que tienes que escribir menos.

Para más detalles puede contactarme.

More Interesting

¿Cómo usan los hackers los operadores avanzados de Google para hackear?

¿Cuáles deberían ser mis primeros pasos para aprender piratería ética?

¿Cuál es todo el proceso para convertirse en un hacker ético certificado? ¿Cómo se aprende? ¿Dónde debería uno comenzar?

Mis instintos dicen que mi esposo me está engañando, pero quiero pruebas antes de acusarlo. ¿Cómo puedo descifrar su cuenta de correo electrónico? Usa instrucciones amigables para los novatos, si puedes.

¿Qué tipo de acción legal se puede tomar contra los acosadores cibernéticos?

¿Cómo puede saber si se ha instalado un keylogger en su computadora? ¿O algún otro tipo de spyware similar?

¿Por qué los hackers palestinos han derribado el sitio web Haaretz, cuando se sabe que es, de hecho, una de las fuentes de noticias más pro-palestinas en Israel?

¿Cuáles son algunos de los usos más comunes de Pastebin?

¿Cuáles son los "errores" más comunes que los programadores inexpertos hacen en sus primeros sitios web / aplicaciones?

¿Cómo se puede aprender sobre piratería y seguridad al crear un sitio web de comercio electrónico?

Ciberguerra: ¿Quién está detrás del ciberataque Flame?

Cómo planificar un ataque DDoS

¿Qué herramientas se pueden usar como alternativa de Burp Suite?

¿Qué nivel de habilidad se requiere para los hackatones?

¿Hay alguna prueba de la participación del gobierno chino en los ataques cibernéticos contra redes y sitios web en los Estados Unidos?