Cómo prevenir y detectar vulnerabilidades de inyección SQL
Hay muchas formas de prevenir ataques de vulnerabilidad de inyección SQL. En esta etapa, se resumen los siguientes métodos:
(1) Verificación de la validez de los datos. Si un cuadro de entrada solo puede contener números, entonces se debe realizar una validación para garantizar que el usuario ingrese solo números. Si se pueden aceptar letras, verifique si hay caracteres inaceptables. La mejor manera es aumentar la función de verificación automática de complejidad de los caracteres. Asegúrese de que la aplicación busque los siguientes caracteres: punto y coma, signo igual, guión, paréntesis y palabras clave SQL. También es una buena idea limitar la longitud de la entrada de datos del formulario y la entrada de cadenas de consulta. Si el nombre de inicio de sesión del usuario sólo tiene un máximo de 10 caracteres, no permita que se ingresen más de 10 caracteres en el formulario. Esto aumentará en gran medida la dificultad para los atacantes de insertar código dañino en los comandos SQL.
(2) Encapsular información de datos. Encapsule los datos enviados por el cliente y no almacene los datos directamente en la cookie. El método consiste en insertar sesión, si, prueba y demás en el código de programación. Esto puede evitar eficazmente que los atacantes obtengan información importante en la cookie.
(3) Eliminar información confidencial en el código. Elimine campos confidenciales, como la información de nombre de usuario y contraseña, que existen en el código y reemplácelos con cuadros de entrada.
SQL=" seleccione entre usuarios donde nombre de usuario = ’admin’y contraseña = ’1234567’ "
Por ejemplo: esto obviamente expondrá la información de nombre de usuario y contraseña del administrador. Se puede modificar a:
SQL= " select * de usuarios donde nombre de usuario='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"
Esto es mucho más seguro y los intrusos no obtendrán fácilmente la información del nombre de usuario y la contraseña.
(4)Reemplazar o eliminar comillas simples. Utilice comillas dobles para reemplazar todas las comillas simples ingresadas por el usuario. Esta simple medida preventiva evitará en gran medida los ataques de vulnerabilidad de inyección SQL. Las comillas simples a menudo no logran restringir el valor de los datos insertados, lo que puede otorgar permisos innecesarios al ingresador. Reemplazar comillas simples por comillas dobles puede hacer que la mayoría de los ataques de vulnerabilidad de inyección SQL fallen. Por ejemplo:
"select* de usuarios donde nombre de usuario='" + admin + "' and userpwd='" + 1234567+ "'"
Obviamente obtendrás lo mismo que
"seleccione * de los usuarios donde nombre de usuario='admin' y contraseña= '1234567'"
Mismo resultado.
(5) Especifique la página de retorno de error. A veces, los atacantes intentan enviar código dañino y cadenas de ataque desde el cliente, y recopilan información del programa y del servidor basándose en el mensaje de error proporcionado por el servicio web para obtener la información deseada. Se debe especificar una página de error que no contenga ninguna información en el Servicio Web.
(6) Archivos de configuración que limitan las conexiones de cadenas SQL. Utilice variables SQL porque las variables no son secuencias de comandos ejecutables, es decir, reemplace la cadena SQL que se conecta a la base de datos con el valor especificado en la página web y luego cifre el archivo Web.config para denegar el acceso.
(7)Establecer los permisos de acceso al directorio web. Prohibir el acceso al directorio de archivos del sitio virtual por parte de usuarios invitados (como usuarios invitados, etc.), cambiar los permisos de usuario a permisos de solo lectura y no agregar usuarios con permisos administrativos a la lista de acceso.
(8) Principio de servicio mínimo. El servidor web debe configurarse con permisos mínimos y solo proporcionar servicios web. Esto puede prevenir eficazmente comandos peligrosos en el sistema, como ftp, cmd, vbscript, etc.
(9) La información de identificación se almacena cifrada.
La información de nombre de usuario y contraseña almacenada en la tabla de usuarios de la base de datos se guarda en texto cifrado o la tabla de usuarios se puede cifrar, lo que puede aumentar en gran medida el nivel de seguridad de acceso a la información de identificación.
(10)Separación de permisos de usuarios. El acceso de los usuarios con permisos sa a la base de datos debe prohibirse o eliminarse tanto como sea posible, y los diferentes permisos de usuario deben dividirse en diferentes bases de datos, de modo que diferentes usuarios solo puedan realizar operaciones de consulta, inserción, actualización y eliminación en las bases de datos autorizadas. a sí mismos, evitando así que diferentes usuarios accedan a bases de datos no autorizadas.