Si no recuerdo mal, creo que Jeff ha mencionado en el Desbordamiento de la Pila podcast de una posible debilidad en sentencias preparadas. Me pregunto de qué tipo(s) de debilidad(es) de qué se refería? Fue, posiblemente, sólo sobre uso inapropiado de los mismos, o algo más siniestro?

El podcast, para mi recordar, no profundizar en el tema, que era sólo un paso por la observación.

OriginalEl autor Henrik Paul | 2009-03-24

4 Comentarios

  1. 6

    Creo que lo que dijo fue que, cuando el uso de Declaraciones Preparadas, SQL server podría caché de su plan de ejecución de consulta, por lo tanto, incluso si usted modificar algunos de los parámetros en la ejecución de la consulta, el servidor podría escoger el mal (probablemente en caché) en la ejecución del plan que llevaría a cabo muy mal.

    También mencionó una nueva característica de SQL Server 2008 para forzar el motor para volver a evaluar los planes de ejecución que se utiliza para superar esta situación.

    Con Sentencias Preparadas, el único problema que tengo es esta. Considere el siguiente Código Java:

    String sql = "select * from table where name like ?";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, "PATTERN%");
    ResultSet rs = pstmt.executeQuery();

    Aquí sería de esperar que, si usted tiene un índice en la tabla(nombre) será utilizado por el plan de consulta. Bueno, no. Porque PraparedStatement debe precompilar y esperar lo peor: ‘%de PATRÓN%’, por ejemplo. Por lo tanto, no optimizar. Me tomó un tiempo para encontrar esta. Él fue el causante de que mi base de datos a sufrir. 🙁

    Espero que ayude.

    OriginalEl autor Pablo Santa Cruz

  2. 2

    Más allá de la normal de inyección de sql (lo que podríamos llamar primer orden) ataque hay niveles secundarios. Por ejemplo, no es raro tener el uso de procedimientos almacenados de la concatenación de cadenas para crear una consulta que se ejecuta. Si el resultado de recuperar los valores de campo se incluyen en una concatenación existe entonces el peligro de inyección.

    OriginalEl autor AnthonyWJones

  3. 1

    Si la instrucción que se ha preparado a los parámetros creados dinámicamente en cualquier forma, que sería más que probable que sea la fuente de la debilidad.

    Si se utiliza la base de datos de la biblioteca con probado clases para establecer los parámetros, entonces no te abres a una inyección SQL en cualquier punto, declaración preparada o no.

    Recuerde, sólo porque una declaración preparada, o porque usted está usando un procedimiento almacenado, no significa que usted está a salvo de los ataques de inyección. Es sólo cuando se utiliza la base de datos de código de proveedor que se va a desinfectar la entrada de parámetros (así como la aplicación a todos los parámetros que pueden ser utilizados), que el aumento de la protección de la inyección de SQL.

    OriginalEl autor casperOne

  4. 0

    No he escuchado el podcast, pero en mi experiencia sólo es bueno viene de las sentencias preparadas. A menudo mejora el rendimiento de la aplicación y evita la inyección de SQL (si se utiliza bien, no como en el segundo ejemplo, en su enlace).

    OriginalEl autor Björn

Dejar respuesta

Please enter your comment!
Please enter your name here