Cómo prevenir la inyección SQL
Primero: reemplazar comillas simples, es decir, cambiar todas las comillas simples por dos comillas simples para evitar que los atacantes modifiquen el SQL. del comando. Mire nuevamente el ejemplo anterior, "SELECCIONE * de Usuarios DONDE inicio de sesión = ''' o ''1''=''1'' Y contraseña = ''' o ''1''=''1'" con " Los resultados de SELECT * de Usuarios DONDE login = ''' o '1''='1'AND contraseña = ''' o '1''='1'" son obviamente diferentes.
Segundo: Eliminar todos los guiones de la entrada del usuario evita que los atacantes creen consultas como "SELECT * from Users WHERE login = 'mas' -- AND contraseña = ''" debido a la La segunda mitad ha sido comentada y ya no es válido. El atacante sólo necesita conocer el nombre de inicio de sesión del usuario legítimo y no necesita saber la contraseña del usuario en absoluto para obtener acceso.
Tercero: Limitar los permisos de la cuenta de base de datos utilizada para ejecutar la consulta. Utilice diferentes cuentas de usuario para realizar operaciones de consulta, inserción, actualización y eliminación. Al aislar las operaciones que pueden realizar diferentes cuentas, también puede evitar que la ejecución de un comando SELECT se utilice para ejecutar un comando INSERT, UPDATE o DELETE.
2) Utilice procedimientos almacenados para ejecutar todas las consultas. Los parámetros SQL se pasan de forma que se evite que los atacantes utilicen comillas simples y guiones. Además, puede restringir los permisos de la base de datos para permitir solo la ejecución de procedimientos almacenados específicos, y todas las entradas del usuario deben cumplir con el contexto de seguridad del procedimiento almacenado llamado, lo que dificulta que se produzcan ataques de inyección.
(3) Limite la longitud del formulario o la cadena de consulta ingresada. Si el nombre de inicio de sesión del usuario tiene como máximo 10 caracteres, entonces no reconoce nada ingresado en el formulario que tenga más de 10 caracteres, lo que hace mucho más difícil para un atacante insertar código dañino en el comando SQL.
(4) Verifique la legalidad de la entrada del usuario y asegúrese de que la entrada contenga solo datos legales. La verificación de datos debe realizarse tanto en el lado del cliente como en el del servidor, y el motivo para realizar la validación del lado del servidor es compensar la falta de seguridad del mecanismo de validación del lado del cliente.
En el lado del cliente, es completamente posible que un atacante acceda al código fuente de la página web, modifique el script que verifica la legalidad (o elimine el script directamente) y luego envíe contenido ilegal al servidor a través del formulario modificado. Por lo tanto, la única forma de garantizar que la operación de validación se haya realizado realmente es realizarla también en el lado del servidor. Hay muchos objetos de validación integrados que puede utilizar, como RegularExpressionValidator, que puede generar automáticamente scripts del lado del cliente para la validación o, por supuesto, puede insertar llamadas a métodos del lado del servidor. Si no puede encontrar un objeto de validación existente, puede usar CustomValidator para crear uno usted mismo.
(5) Cifre los inicios de sesión de los usuarios, las contraseñas y otros datos para su almacenamiento. Cifrar los datos ingresados por el usuario y luego compararlos con los datos almacenados en la base de datos equivale a "esterilizar" los datos ingresados por el usuario para que ya no tengan ningún significado especial para la base de datos, evitando así que los atacantes inyecten SQL Order. . Hay un HashPasswordForStoringInConfigFile en la clase Security.FormsAuthentication que es ideal para desinfectar los datos de entrada.
(6) Verifique el número de registros devueltos por la consulta que extrajo los datos. Si su programa solicita solo un registro pero devuelve más de uno, considérelo un error.
------------------------------------------- -------------------------------------------------- -- -------------------------------
La clave es entender el principio. , es muy sencillo evitarlo.
1.1. Filtrar parámetros que requieren caracteres sensibles en SQL (tenga en cuenta que se ignoran las mayúsculas y minúsculas al agregar)
2. el servidor de la base de datos y elimine el dll correspondiente
3. Información de excepción del servidor Shield
3. Cierre el procedimiento almacenado xp_cmdshell del servidor de la base de datos
4. Procedimiento almacenado xp_cmdshell del servidor de base de datos
5. Cierre el procedimiento almacenado xp_cmdshell del servidor de base de datos
6.