Vulnerabilidad de TopN: inyección de sql

inyección SQL

La inyección de SQL significa que la aplicación web no juzga la legalidad de los datos ingresados ​​por el usuario ni los filtra de manera laxa. El atacante puede agregar declaraciones SQL adicionales al final de la declaración de consulta predefinida en la aplicación web, sin el conocimiento del administrador. En el caso de operación ilegal, puede engañar al servidor de la base de datos para ejecutar cualquier consulta no autorizada, a fin de obtener más información de los datos correspondientes.
Debido a que la racionalidad de los datos de entrada del usuario no se juzgó al escribir el programa, el atacante puede ejecutar el código mezclado con el punto de inyección de inyección SQL y obtener la información necesaria para el próximo ataque a través del aviso que devuelve la página. De acuerdo con los parámetros de entrada, los métodos de inyección SQL se pueden dividir aproximadamente en dos categorías: inyección numérica e inyección de caracteres.

1. Inyección digital
Cuando los parámetros de entrada son números enteros, como ID, edad, número de página, etc., si existe una vulnerabilidad de inyección, se puede considerar como inyección digital. Este tipo de inyección digital ocurre más en lenguajes de tipo débil como ASP y PHP. El lenguaje de tipo débil deducirá automáticamente el tipo de variable. Por ejemplo, si el parámetro id=8, PHP deducirá automáticamente el tipo de datos de la variable. id como tipo int, luego id=8 y 1=1, se deducirá como un tipo de cadena, que es una característica de un lenguaje débilmente tipificado. Para lenguajes fuertemente tipados como Java y C#, si intenta convertir una cadena a un tipo int, se generará una excepción y la ejecución no podrá continuar. Por lo tanto, los lenguajes fuertemente tipados rara vez tienen vulnerabilidades de inyección numérica.
2. Inyección de tipo de carácter
Cuando el parámetro de entrada es una cadena de caracteres, se denomina tipo de carácter. La mayor diferencia entre las inyecciones numéricas y de caracteres es que los tipos numéricos no necesitan cerrarse con comillas simples, mientras que los tipos de cadena generalmente deben cerrarse con comillas simples.
Los ataques de inyección SQL son muy dañinos y es difícil que los cortafuegos los intercepten.Los principales métodos para prevenir los ataques de inyección SQL incluyen los siguientes aspectos. [9]
1. Gestión jerárquica
Administre usuarios en diferentes niveles y controle estrictamente los permisos de los usuarios. Para los usuarios comunes, está prohibido otorgar permisos relacionados, como la creación, eliminación y modificación de bases de datos. Solo los administradores del sistema tienen la autoridad para agregar, eliminar, modificar y comprobar. Por ejemplo, en el ejemplo anterior, el usuario agregó una tabla desplegable a la instrucción de consulta. No se debe permitir que se ejecute, de lo contrario no se puede garantizar la seguridad de la base de datos del sistema. Por lo tanto, está restringido por el diseño de permisos. Incluso los atacantes maliciosos incorporan códigos de ataque relevantes al enviar datos. Pero debido a que los permisos están establecidos, el código no se puede ejecutar. Reduciendo así la amenaza de seguridad de la inyección de SQL a la base de datos. [9]
2. Transferencia de valores de parámetros
Cuando los programadores escriben lenguaje SQL, está prohibido escribir variables directamente en declaraciones SQL y deben pasar variables relacionadas configurando los parámetros correspondientes. Suprimiendo así la inyección de SQL. La entrada de datos no se puede incrustar directamente en una instrucción de consulta. Al mismo tiempo, es necesario filtrar el contenido de entrada y filtrar los datos de entrada no seguros. O pase variables de entrada pasando parámetros por valor. Esto puede prevenir los ataques de inyección SQL en la mayor medida posible. [9]
3. Filtrado básico y filtrado secundario
Antes del ataque de inyección SQL, el intruso envía caracteres especiales como "y" modificando los parámetros para determinar si existe una vulnerabilidad, y luego escribe la declaración de inyección SQL a través de varios caracteres como seleccionar y actualizar . Por lo tanto, para evitar la inyección de SQL, es necesario verificar la entrada del usuario para garantizar la seguridad de la entrada de datos. Al verificar las variables ingresadas o enviadas, convierta o filtre caracteres como comillas simples, comillas dobles y dos puntos, evitando así de manera efectiva la inyección de SQL. Por supuesto, hay muchos caracteres peligrosos.Al obtener los parámetros enviados por el usuario, primero se debe realizar un filtrado básico y luego se debe realizar un filtrado secundario de acuerdo con la función del programa y la posibilidad de que el usuario ingrese para garantizar la seguridad de el sistema. [9]
4. Utilice los parámetros de seguridad
de la base de datos SQL para suprimir eficazmente el impacto de los ataques de inyección SQL. Los parámetros especiales de seguridad de SQL se establecen durante el diseño de la base de datos de SQLServer. Al programar, intente utilizar parámetros de seguridad para evitar ataques de inyección. Garantizando así la seguridad del sistema. [9]
La base de datos de SQLServer proporciona la colección de Parámetros. Su función en la base de datos es realizar la comprobación de tipo y la verificación de longitud de los datos. Cuando el programador agrega la colección de Parámetros durante el diseño del programa, el sistema filtrará automáticamente el código de ejecución en el entrada del usuario Reconózcalo como un valor de carácter. Si la entrada del usuario contiene código malicioso, la base de datos también puede filtrarlo durante la inspección. Al mismo tiempo, la colección de parámetros también puede realizar comprobaciones de ejecución obligatorias. Una vez que el valor de verificación está fuera de rango. Aparecerá un error anormal en el sistema, y ​​la información será enviada al administrador del sistema al mismo tiempo, para que el administrador pueda tomar las medidas preventivas correspondientes. [9]
5. Escaneo de vulnerabilidades
Para prevenir los ataques de inyección SQL de manera más efectiva, como administrador del sistema, además de establecer medidas preventivas efectivas, también es necesario descubrir las vulnerabilidades de seguridad de los ataques SQL en el sistema de manera oportuna. Los administradores del sistema pueden comprar algunas herramientas especiales de análisis de vulnerabilidades de SQL del sistema y, a través de herramientas de análisis profesionales, pueden analizar las vulnerabilidades correspondientes en el sistema de manera oportuna. Aunque la herramienta de escaneo de vulnerabilidades solo puede escanear vulnerabilidades de inyección SQL, no puede prevenir los ataques de inyección SQL. Sin embargo, el administrador del sistema puede tomar las medidas preventivas correspondientes para bloquear las vulnerabilidades correspondientes a través de los agujeros de seguridad escaneados según diferentes situaciones, para cerrar la puerta a los ataques de inyección SQL y garantizar la seguridad del sistema. [9]
6. Verificación de múltiples capas
La función del sistema del sitio web actual es cada vez más compleja. Para garantizar la seguridad del sistema, la entrada de datos del visitante debe verificarse estrictamente antes de ingresar al sistema, y ​​la entrada que no pasa la verificación será rechazada directamente para acceder a la base de datos, y se enviará un mensaje de error a la parte superior. sistema de niveles. Al mismo tiempo, la información de entrada relevante del visitante se verifica en el programa de acceso del cliente, para evitar la inyección SQL simple de manera más efectiva. Pero si la capa inferior de la autenticación multicapa pasa los datos de autenticación, un atacante que pasa por alto al cliente puede acceder al sistema a voluntad. Por lo tanto, al realizar la autenticación de múltiples capas, cada capa debe cooperar entre sí. Solo cuando se lleva a cabo una protección de autenticación efectiva tanto en el lado del cliente como en el del sistema, se pueden prevenir mejor los ataques de inyección SQL. [9]
7. Cifrado de la información de la base de datos
Los métodos tradicionales de cifrado y descifrado se pueden dividir aproximadamente en tres tipos: [9]
(1) Cifrado simétrico: es decir, tanto la parte que cifra como la que descifra utilizan el mismo algoritmo y clave de cifrado. la preservación de la clave es muy crítica, porque el algoritmo es público, pero la clave se mantiene en secreto. Una vez que se filtra la clave, los piratas informáticos aún pueden descifrarla fácilmente. Los algoritmos de cifrado simétrico comunes son: AES, DES, etc. [9]
(2) Cifrado asimétrico: use diferentes claves para el cifrado y el descifrado, las claves se dividen en clave pública y clave privada, los datos cifrados con la clave privada deben descifrarse con la clave pública y cifrarse con la clave pública. los datos deben ser descifrados con la clave privada correspondiente Los algoritmos de cifrado asimétrico comunes incluyen: RSA, etc. [9]
(3) Cifrado irreversible: use el algoritmo hash para cifrar los datos y no se puedan descifrar de nuevo a los datos originales. Dichos algoritmos hash se usan comúnmente: md5, SHA-1, etc.

Supongo que te gusta

Origin blog.csdn.net/Artisan_w/article/details/132225880
Recomendado
Clasificación