vulnerabilidad de truncamiento de SQL

1

Llegué a conocer la vulnerabilidad de truncamiento de SQL que desconocía. Tengo entendido que esta vulnerabilidad se basa en el hecho de que MySQL trunca el valor de una "consulta de inserción" si el valor excede el ancho de la columna correspondiente. La primera aparición de esta vulnerabilidad se encuentra en CVE-2008-4106 que reporta el problema en el CMS de WordPress. El CVE informa que el problema estaba relacionado con una implementación de WordPress. Pero diría que este es un problema relacionado con la implementación de MySQL que trunca la entrada en lugar de generar un error y bloquear la consulta.

Entonces, ¿la vulnerabilidad de truncamiento de SQL es un problema en el DBMS (MySQL) o en la aplicación web que no comprueba la longitud de la cadena?

Instalé la última versión de MySQL (5.5) para realizar algunas pruebas y, aparentemente, si el valor insertado excede el ancho de la columna, recibo un error:

Error: Data too long for column 'name' at row 1 

y la consulta no se realiza. Esto me sugiere que MySQL ahora implementa una mejor comprobación de la longitud de entrada y, por lo tanto, la aplicación web no debería ser responsable de esta comprobación. ¿Qué me estoy perdiendo?

    
pregunta Federico 27.06.2014 - 15:21
fuente

1 respuesta

1

Respondo a mi propia pregunta gracias a @SilverlightFox.

MySQL tiene dos modos que puede operar: STRICT_TRANS_TABLES y STRICT_ALL_TABLES y citando el documento de MySQL:

  

El modo estricto controla cómo MySQL maneja los valores no válidos o faltantes en las declaraciones de cambio de datos como INSERT o UPDATE. Un valor puede ser inválido por varias razones. Por ejemplo, puede tener el tipo de datos incorrecto para la columna o puede estar fuera de rango. Falta un valor cuando una nueva fila para insertar no contiene un valor para una columna que no sea NULL que no tenga una cláusula DEFAULT explícita en su definición. (Para una columna NULA, se inserta NULL si falta el valor).

Si los dos modos están deshabilitados, MySQL trunca automáticamente la cadena insertada en caso de que exceda la longitud de la columna. Por lo tanto, el comportamiento de MySQL es "legítimo" y la razón por la que debo verificar la duración de la entrada en la aplicación web es porque no debo confiar en el hecho de que MySQL tiene STRICT_TRANS_TABLES y STRICT_ALL_TABLES habilitados.

    
respondido por el Federico 01.07.2014 - 14:12
fuente

Lea otras preguntas en las etiquetas