La comprobación de la presencia de datos es una función de algunos lenguajes de programación informática , como Perl , [1] Ruby [2] o Ballerina [3], diseñada para aumentar la seguridad al impedir que usuarios malintencionados ejecuten comandos en un equipo host. Las comprobaciones de presencia de datos resaltan riesgos de seguridad específicos asociados principalmente con sitios web que son atacados mediante técnicas como la inyección SQL o ataques de desbordamiento de búfer .
El concepto detrás de la comprobación de taint es que cualquier variable que pueda ser modificada por un usuario externo (por ejemplo, una variable establecida por un campo en un formulario web ) plantea un riesgo potencial de seguridad. Si esa variable se utiliza en una expresión que establece una segunda variable, esa segunda variable ahora también es sospechosa. La herramienta de comprobación de taint puede entonces proceder variable por variable formando una lista de variables que pueden estar influenciadas por la entrada externa. Si alguna de estas variables se utiliza para ejecutar comandos peligrosos (como comandos directos a una base de datos SQL o al sistema operativo del ordenador anfitrión ), el verificador de taint advierte que el programa está utilizando una variable taint potencialmente peligrosa. El programador de la computadora puede entonces rediseñar el programa para erigir un muro seguro alrededor de la entrada peligrosa.
La verificación de la contaminación puede considerarse como una aproximación conservadora de la verificación completa de la no interferencia o del concepto más general de flujo de información seguro . [4] Debido a que el flujo de información en un sistema no puede verificarse examinando un único rastro de ejecución de ese sistema, [5] los resultados del análisis de contaminación reflejarán necesariamente información aproximada sobre las características del flujo de información del sistema al que se aplica. [6]
El siguiente código Perl peligroso abre una gran vulnerabilidad de inyección SQL al no verificar el valor de la $name
variable:
#!/usr/bin/perl my $name = $cgi -> param ( "name" ); # Obtener el nombre del navegador ... $dbh -> { TaintIn } = 1 ; $dbh -> execute ( "SELECT * FROM users WHERE name = '$name';" ); # Ejecutar una consulta SQL
Si la comprobación de errores está activada, Perl se negaría a ejecutar el comando y saldría con un mensaje de error, porque se está utilizando una variable contaminada en una consulta SQL. Sin la comprobación de errores, un usuario podría introducir foo'; DROP TABLE users --
, ejecutando así un comando que elimina toda la tabla de la base de datos. Sería mucho más seguro codificar el valor contaminado de $name en una cadena literal SQL y utilizar el resultado en la consulta SQL, garantizando que no $name
se evaluará ningún comando peligroso incrustado en. Otra forma de lograrlo es utilizar una declaración preparada para sanear todas las entradas de variables para una consulta.
Una cosa a tener en cuenta es que Perl DBI requiere que uno configure el TaintIn
atributo de un identificador de base de datos , así como también habilite el modo taint para verificar las cadenas SQL. [7]
Perl admitió la eliminación de errores en scripts setuid al menos desde la versión 3.0 (publicada en 1989), [8] aunque no fue hasta la versión 5.0 (publicada en 1994) [8] que se introdujo el -T
cambio [1] que integraba la eliminación de errores en un único entorno de ejecución.
En 1996, Netscape implementó la manipulación de datos para JavaScript en Netscape Navigator 3. [9] Sin embargo, dado que se consideraba que la compatibilidad era experimental, se entregó deshabilitada (requería la intervención del usuario para activarla) y requería que los autores de las páginas modificaran los scripts para beneficiarse de ella. Otros proveedores de navegadores nunca implementaron la funcionalidad.
{{cite web}}
: |last=
tiene nombre genérico ( ayuda )Mantenimiento de CS1: nombres numéricos: lista de autores ( enlace )[...] el modelo de seguridad de manipulación de datos es experimental en Navigator 3.0 y no está habilitado de forma predeterminada. Sin embargo, se espera que sea el modelo de seguridad predeterminado en la versión 4.0 de Navigator.