5.
Configura el Acceso a la Base de Datos con Mínimos Privilegios
Si la cuenta de base de datos solo necesita lectura, usa un usuario con permisos
restringidos (SELECT en lugar de INSERT, UPDATE o DELETE cuando sea posible).
Estas técnicas te ayudarán a prevenir ataques de inyección SQL y mejorar la seguridad
en tus consultas. ¿Quieres ayuda con un caso específico en tu aplicación?
4o
Dijiste:
String builder
ChatGPT dijo:
Si necesitas construir consultas dinámicas en Java, no uses StringBuilder para
concatenar valores directamente en la consulta, ya que esto puede exponer tu
aplicación a inyección SQL.
Mala práctica (Vulnerable a SQL Injection)
java
CopiarEditar
StringBuilder query = new StringBuilder();
[Link]("SELECT * FROM tramite WHERE estado = '")
.append(estado) // Riesgo de inyección si `estado` proviene de entrada del
usuario
.append("'");
Statement stmt = [Link]();
ResultSet rs = [Link]([Link]());
Si estado contiene algo como ' OR 1=1 --, la consulta se convierte en:
sql
CopiarEditar
SELECT * FROM tramite WHERE estado = '' OR 1=1 --'
Esto devuelve todos los registros y compromete la seguridad de la base de datos.
Buena práctica (StringBuilder con PreparedStatement)
Si necesitas construir consultas dinámicas, usa StringBuilder solo para armar la
estructura de la consulta, pero usa PreparedStatement para los valores.
java
CopiarEditar
StringBuilder query = new StringBuilder();
[Link]("SELECT * FROM tramite WHERE 1=1");
if (estado != null && ![Link]()) {
[Link](" AND estado = ?");
PreparedStatement pstmt = [Link]([Link]());
[Link](1, estado); // Previene SQL Injection
ResultSet rs = [Link]();