¿Es el único personaje en los textos de PL/SQL que necesita escapar asumiendo que las cláusulas COM no se utilizan?

Tengo un script que genera una gran cantidad de declaraciones de actualización. Esas declaraciones serán ejecutadas por ser copiadas y pegadas en SQL Developer por un humano sin validación.

Para evitar la inyección SQL accidental, intenté entender más sobre caracteres especiales. Sobre la base de los recursos que he encontrado hasta ahora, estoy empezando a creer que si las cláusulas de la AS no se utilizan, entonces es sólo la única cita que necesita ser escapada. Esto contradice mi sentido empírico, que declara que escapar caracteres especiales debe ser más complicado que eso, así que decidí publicar esta pregunta para validarla.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por javajedi


2 Respuestas:

  • En PL/SQL, si no estás utilizando cláusulas como la instrucción EXECUTE IMMEDIATE que permiten la ejecución dinámica de sentencias SQL, la única caracter especial que necesitas escapar es la comilla simple ( ' ). Esto se debe a que en PL/SQL se utilizan comillas simples para delimitar cadenas de texto, por lo que si necesitas incluir una comilla simple dentro de una cadena, debes escaparla duplicándola ( '' ).

    Si estás generando declaraciones de actualización que serán copiadas y pegadas en SQL Developer, es importante tener en cuenta que escapar la comilla simple es la única precaución necesaria para evitar inyecciones SQL accidentales. Asegúrate de que todos los valores de las variables que se incluyen en las declaraciones de actualización estén correctamente escapados para evitar problemas de seguridad.

    Respondida el Dec 18, 2020 a las 15:22 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Sí, si no se utilizan cláusulas COM (concatenación de objetos), la única cita es el único carácter que necesita escapar en los textos de PL/SQL.

    En PL/SQL, las comillas simples se utilizan para delimitar cadenas literales. Cuando una cadena literal contiene una comilla simple, debe escaparse con otra comilla simple.

    Por ejemplo:

    
    DECLARE
      v_name VARCHAR2(20) := 'John''s Pizza';
    BEGIN
         
    • - Insert the value into a table
    INSERT INTO customers (name) VALUES (v_name); END;

    En este ejemplo, la comilla simple en el nombre de "John's Pizza" se escapa con otra comilla simple.

    Sin embargo, si no se utilizan cláusulas COM, no es necesario escapar otros caracteres especiales como el punto y coma (;), el signo igual (=) o el signo de porcentaje (%).

    Esto se debe a que las cláusulas COM permiten concatenar cadenas literales con otras cadenas, variables o expresiones. Cuando se utilizan cláusulas COM, los caracteres especiales en las cadenas concatenadas deben escaparse para evitar errores de sintaxis.

    Por lo tanto, si no se utilizan cláusulas COM, solo es necesario escapar las comillas simples en los textos de PL/SQL.

    Respondida el Dec 18, 2020 a las 15:26 - por Gemini

    Votos positivos: 0 | Votos negativos: 0