¿Los procedimientos almacenados impiden la inyección de SQL en PostgreSQL?

19

¿Es cierto que los procedimientos almacenados evitarán que se inyecten bases de datos? Investigué un poco y descubrí que SQL Server, Oracle y MySQL no son seguros contra las inyecciones de SQL si solo usamos procedimientos almacenados. Sin embargo, este problema no existe en PostgreSQL. ¿La implementación de procedimientos almacenados en el núcleo de PostgreSQL impide la inyección de SQL o existen otras razones / diferencias? ¿Puedo usar la inyección SQL en PostgreSQL si solo usamos procedimientos almacenados?

    
pregunta Am1rr3zA 19.11.2010 - 23:44
fuente

4 respuestas

11

En resumen, no, los procedimientos almacenados no impiden la inyección de SQL. Depende de cómo maneje el SQL dinámico dentro del procedimiento almacenado.

Para obtener una respuesta más completa, consulte lo que se publica aquí: enlace

    
respondido por el anonymous 19.11.2010 - 23:58
fuente
6

Revise estos enlaces y la imagen se aclarará:

enlace

enlace

"... Medidas para evitar la inyección de SQL

  1. Valide todas las entradas provenientes del usuario en el servidor.
  2. Evite el uso de consultas SQL dinámicas si hay un método alternativo disponible.
  3. Utilice el procedimiento almacenado parametrizado con parámetros incrustados.
  4. Ejecute los procedimientos almacenados utilizando una interfaz segura como, por ejemplo, declaraciones recuperables en JDBC. o CommandObject en ADO.
  5. Use una cuenta con privilegios bajos para ejecutar la base de datos.
  6. Asigne roles y privilegios adecuados al procedimiento almacenado que se utiliza en las aplicaciones. "
respondido por el Phoenician-Eagle 21.11.2010 - 04:31
fuente
5

SI usa SP correctamente, entonces está bastante a salvo de Inyección SQL (asumiendo que de todos modos, de todos modos, suponga que todavía realiza la validación de entrada adecuada). SI .

Ah, pero ¿qué significa usar SP correctamente?

Dos de los usos indebidos más comunes del SP que veo a menudo, y cada uno de ellos puede conducir a la Inyección SQL incluso con procedimientos almacenados , son:

  • SQL dinámico dentro del SP.
  • Llamar al SP desde el código como ejecutarías una cadena concatenada. Es decir. simplemente enviando a la base de datos "exec spname (param1)", en lugar de usar objetos de comando / parámetro (o parametrizar la consulta, según el idioma). SQLi todavía puede ser inyectado en la llamada SP ...
respondido por el AviD 21.11.2010 - 01:40
fuente
4

Necesita vinculación de variables junto con parámetros nombrados, independientemente de si la consulta es un procedimiento almacenado o no. También debe preocuparse por ciertas declaraciones de SQL como: LIKE

    
respondido por el atdre 20.11.2010 - 02:44
fuente

Lea otras preguntas en las etiquetas