Cómo prevenir la inyección de Sql

¿Qué es la inyección SQL (SQLi)?

Todo el mundo sabe que con el avance de la tecnología, la seguridad es la característica básica e importante para todas las empresas y plataformas de redes sociales. Casi todas las empresas confían en sus datos comerciales, estos datos se almacenan en las bases de datos. Entonces, SQL proporciona técnicas para salvar sus datos de los piratas informáticos. Podemos proteger los datos de nuestro sitio web de los piratas informáticos utilizando diferentes técnicas. Del mismo modo, la inyección SQL es una técnica de piratería. Los piratas informáticos pueden acceder a sus datos, también pueden bloquear sus servidores mediante la inyección de algún código en sus bases de datos. Este método es factible debido a la codificación incorrecta de los paquetes web inclinados. Algunos desarrolladores nuevos no verifican el vacío del campo de datos y el campo vacío es la causa de la inyección de SQL.

Evitar la inyección SQL a través de consultas parametrizadas

Este enfoque consiste en el uso de declaraciones preparadas con el marcador de posición de signo de interrogación (?) en nuestras consultas cada vez que necesitamos insertar una tarifa proporcionada por el consumidor. Esto es muy efectivo y, a menos que haya un gusano dentro de la implementación de la fuerza motriz de JDBC, es inmune a las vulnerabilidades.



Un código de ejemplo simple para esta técnica es:

lista pública safeFindAccountsByCustomerId (String customerId)

lanza una excepción {

cadena sql = ' seleccione ' + ' id_cliente, número_cuenta, id_sucursal, saldo de Cuentas ' + ' donde id_cliente = ? ‘ ;

Conexión c = dataSource.getConnection( ) ;

SentenciaPreparada p = c.prepareStatement( sql ) ;

p.setString( 1 , IDcliente ) ;

ResultSet rs = p.executeQuery(sql));

// omitido: procesar filas y devolver una lista de cuentas

}

En el código anterior, el método prepareStatement() disponible en el ejemplo de conexión para obtener una declaración preparada. Esto nos permite insertar correctamente valores proporcionados por el usuario en una pregunta antes de ejecutarla.

El uso de consultas preparadas de PDO

Utilice PDO y consultas preparadas.

($conn es un objeto PDO)

$stmt = $conn -> preparar (' INSERTAR EN VALORES tbl ( :Id , :name ) ' );

$stmt -> bindValue (':id', $id);

$stmt -> bindValue(' :nombre ' , $nombre ) ;

$sentencia -> ejecutar() ;

Las declaraciones preparadas son resistentes a la inyección de SQL, debido al hecho de que los valores de los parámetros, que se transmiten más tarde mediante el uso de un protocolo único, ahora no necesitan escaparse con éxito. Si la plantilla de declaración original no se deriva de una entrada externa, no puede surgir la inyección SQL.

Prevenir a través de la asignación relacional de objetos (ORM) en Ruby Framework

Muchos equipos de desarrollo optan por utilizar marcos de Mapeo relacional de objetos (ORM) para hacer que la traducción de las unidades de resultados de SQL en objetos de código sea más fluida. Las herramientas ORM a menudo sugieren que los desarrolladores rara vez deberían escribir declaraciones SQL de su código, y estas herramientas felizmente usan declaraciones parametrizadas bajo el capó.

def actual_usuario(correo electrónico)

# El objeto 'Usuario' es un objeto Active Record que tiene que encontrar métodos

# generado automáticamente por Rails.

Usuario.find_by_email (correo electrónico)

Fin

El código anterior lo salvará de inyecciones de SQL o ataques de piratas informáticos.

Base de datos cifrada

Otro método simple para evitar que su base de datos SQL sea inyectada es la base de datos o datos cifrados. Por lo tanto, generalmente guarde las credenciales de su base de datos en un informe separado y cifre de forma segura para garantizar que los atacantes no puedan beneficiarse mucho.