Foros del Web » Programando para Internet » PHP »

los procedimientos almacenados dan algo de seguridad o es un mito

Estas en el tema de los procedimientos almacenados dan algo de seguridad o es un mito en el foro de PHP en Foros del Web. los procedimientos almacenados dan algo de seguridad o es un mito me gustaría saber más con tu opinión ya que muchos hablan de eso gracias...
  #1 (permalink)  
Antiguo 23/08/2013, 10:36
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 8 años
Puntos: 8
los procedimientos almacenados dan algo de seguridad o es un mito

los procedimientos almacenados dan algo de seguridad o es un mito

me gustaría saber más con tu opinión ya que muchos hablan de eso
gracias
  #2 (permalink)  
Antiguo 23/08/2013, 10:50
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 7 años, 1 mes
Puntos: 3
Respuesta: los procedimientos almacenados dan algo de seguridad o es un mito

Los procedimientos almacenados da mas seguridad ya que previene los ataques Sql por Inyección. Aqui puedes leer un poco sobre el tema: http://www.guillesql.es/Articulos/SQ..._Ejemplos.aspx
  #3 (permalink)  
Antiguo 23/08/2013, 10:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 10 meses
Puntos: 2653
Respuesta: los procedimientos almacenados dan algo de seguridad o es un mito

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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 23/08/2013, 10:54
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 8 años
Puntos: 8
Respuesta: los procedimientos almacenados dan algo de seguridad o es un mito

Cita:
Iniciado por adryan310 Ver Mensaje
Los procedimientos almacenados da mas seguridad ya que previene los ataques Sql por Inyección. Aqui puedes leer un poco sobre el tema: http://www.guillesql.es/Articulos/SQ..._Ejemplos.aspx
no entiendo, dicen todos que la protege pero no dice como la protege, de favor me podrias explicar
gracias
  #5 (permalink)  
Antiguo 23/08/2013, 11:16
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 7 años, 1 mes
Puntos: 3
De acuerdo Respuesta: los procedimientos almacenados dan algo de seguridad o es un mito

OK sere breve con mi explicacion:

- Los procedimientos almacenados reciben variables @nombre,@apellidos, etc. Cuando programas en el lenguaje que lo tengas que hacer ejemplo: PHP, VB.net, Java, etc. Tu llamas a los procedimientos y le pasas las variables que el procedimiento almacenado requiera como parametros, a eso se le llama procedimientos almacenados parametrizados. Entonces al ejecutar el sitio o programa que hallas realizado y el programa realice peticiones sql(Select, Insert, Update, Delete) por medio de los procedimientos almacenados parametrizados, el Sql entendera que los parametros que esta recibiendo en los procedimientos almacenados son variables y no parte de la consulta. Eso te lo explica mejor el enlace a wikipedia que te deje en la respuesta anterior. Espero hallas entendido un poco. Si fue asi dale me gusta
  #6 (permalink)  
Antiguo 23/08/2013, 11:30
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 8 años
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

Etiquetas: procedimientos, seguridad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:43.