Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/08/2013, 11:30
Avatar de jor_0203
jor_0203
 
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: los procedimientos almacenados dan algo de seguridad o es un mito

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Es una pregunta de manual, pero vamos a procurar que se entienda:
Partiendo de que hay algunas diferencias en las formas de manejar los SP dependeindeo del DBMS que uses, los stored procedure sólo pueden recibir parámetros. No reciben nada más que parámetros, e interpretan parámetros, que sólo pueden contener valores lícitos según el tipo de dato con el que se declaran.
Por otro lado, todo parámetro es una variable, y se interpreta como tal en el body. Por tanto, cualquier cosa que se le inserte a esa variable se interpretará como dato, y no como otra cosa. Esto implica que si le intentas inyectar SQL a una variable, únicamente lo puedes hacer en una variable de caracteres (VARCHAR, CHAR, etc), y por definición, lo que se haya inyectado, queda aislado dentro de esa cadena, que sólo tendrá efecto como dato. Si le intentas meter en un parámetro algo que no corresponda al tipo de dato, la ejecución del SP cae en error.
Además, por la forma de manejo de esa variables dentro de la sentencias internas, cualquier cosa que se haya inyectado en ese parámetro, si ocurriese, rompería la sintaxis de alguna sentencia (siempre), lo que generaría un fallo del SP, sin llegar jamás a ejecutarse la sentencia inyectada.
¿Se va entendiendo?
Ahora bien, en cada uno de los DBMS existe una sentencia en especial, posible de generar internamente la construcción de lo que se denomina "sentencias preparadas", pero nadie en su sano juicio usa esos métodos para tomar todo lo queel parámetro contiene y ejecutarlo tal y como llega (único caso posible de inyección en este contexto), sino que se usa para tomar sólo algunos parámetros y construir dinamicamente una query a ejecutar, con lo que cualquier cosa inyectada destruye la ejecución.
En definitiva, es el método de mayor seguridad que proveen los DBMS en forma directa.

De hecho, las aplicaciones web más robustas no tienen acceso desde las aplicaciones que no sean por medio de SP.
En mi experiencia, la empresa para la que trabajo tiene como protocolo de desarrollo que todo acceso a las bases de datos sea únicamente por SP, y además ningún SP se pueda llamar desde otra parte que no sea los controladores de datos (DAC), y que a su vez los controladores de datos sólo puedan ser accedidos por los controladores de actividad (capa de negocio), pero jamás puedan ser invocados desde la interfaz o los controladores de entidades (es decir que trabajamos en un esquema MVC).

Moraleja: ¿Quieres seguridad? Entonces tendrás que trabajar mucho y programar muchísimo más.
No hay otro camino.
increible que hermosa contestacion, pero tu que me recomendas y por donde debo empezar para mejorar la seguridad con tu esperiencia
recuerda que soy novato aunque si programo bien me falta mucha idea de la
malicia o experiencia, para proteger

gracias