"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Escapar de las citas individuales es una defensa confiable contra la inyección de SQL?

¿Escapar de las citas individuales es una defensa confiable contra la inyección de SQL?

Publicado el 2025-03-23
Navegar:157

Is Escaping Single Quotes a Reliable Defense Against SQL Injection?

Protección de inyección SQL: falacia de cotizaciones individuales Escape

En el campo del desarrollo de software, prevenir ataques de inyección SQL es crucial. Si bien las consultas SQL parametrizadas son la mejor manera de limpiar las entradas, algunos desarrolladores aún usan el mecanismo de defensa que escapa de citas individuales y encierra las entradas de los usuarios en citas individuales como alternativa.

Técnica de escape defectuosa

El método implica reemplazar cualquier cita única en la entrada del usuario con cotizaciones individuales dobles y encerrar la cadena completa en cotizaciones individuales:

sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"

El principio de esta técnica es que cualquier cita sola ingresada por el usuario se neutraliza efectivamente para evitar que la cadena termine. Por lo tanto, cualquier otro personaje, como un signo de semicolon o porcentaje, se convierte en parte de la cadena y no se ejecuta como un comando.

Vulnerabilidad de inyección

]

Sin embargo, esta técnica no puede manejar casos en los que la entrada del usuario en sí misma puede contener cotizaciones individuales dobles. En este caso, la cadena terminará y el resto de la entrada se puede ejecutar como comandos SQL.

Ejemplo Entrada

Para ilustrar esto, considere la siguiente entrada del usuario:

'SensitiveData' HAVING AMOUNT>2000 OR ''=''

Después de la ejecución, el código se convertirá en:

SELECT * FROM ACCOUNT WHERE NAME='SensitiveData' HAVING AMOUNT>2000 OR ''=''

Esta entrada inyecta con éxito la cláusula OR en la consulta SQL, sin pasar por la limpieza esperada.

más consideraciones

Es importante tener en cuenta que existen otras vulnerabilidades en esta técnica de escape, que incluye:

  • no puede defenderse de todos los tipos de ataques de inyección SQL, como ataques usando comentarios u otros terminadores de declaración.
  • Introducir la sobrecarga de rendimiento y mantenimiento.
  • hacer que el código sea difícil de leer y comprender.

Best Practices

no confíe en las técnicas de limpieza de entrada temporales, siga estas mejores prácticas para evitar la inyección de SQL:

  • Use la consulta SQL parametrizada o las declaraciones de pre-preparación JDBC.
  • Solo se permiten valores y formatos de entrada esperados (listas blancas).
  • Las listas negras solo se usan si es absolutamente necesario y después de que se implementan otras medidas de mitigación.
  • Evite la concatenación dinámica de SQL y String.
  • Considere usar procedimientos almacenados con permisos de base de datos limitados.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3