Los ataques de inyección SQL se refieren a la explotación de vulnerabilidades de diseño para ejecutar comandos Sql en el servidor de destino y realizar otros ataques para generar comandos Sql dinámicamente sin verificar los datos ingresados por el usuario. Esta es la razón principal por la que los ataques de inyección Sql tienen éxito.
Por ejemplo:
Si su declaración de consulta es seleccione * del administrador donde nombre de usuario =''"&usuario&"'' y contraseña =''"&pwd&"''"
Entonces, si mi nombre de usuario es: 1'' o ''1''=''1
Entonces, su declaración de consulta se convertirá en:
seleccione * del administrador donde nombre de usuario=''1 o ''1''=''1'' y contraseña=''"&pwd&"''"
De esta manera, su declaración de consulta pasará y podrá ingresar a su interfaz de administración.
Por lo tanto, es necesario comprobar la entrada del usuario al tomar precauciones. Convierta o filtre algunos caracteres especiales, como comillas simples, comillas dobles, punto y coma, comas, dos puntos, números de conexión, etc.
Los caracteres especiales y cadenas que deben filtrarse son:
usuario neto
xp_cmdshell
/agregar
ejecutivo master.dbo.xp_cmdshell
administradores de grupo local neto
seleccionar
contar
asc
carbonizarse
medio
''
:
"
insertar
eliminar de
mesa desplegable
actualizar
truncar
de
% ¡
Los siguientes son dos códigos de prevención que escribí para resolver ataques de inyección para su referencia!
js versión del código para prevenir ataques de inyección SQL:
<lenguaje de escritura="****">
<!--
var url = ubicación.búsqueda;
var re=/^?(.*)(select%20|insert%20|delete%20from%20|count(|drop%20table|update%20truncate%20|asc(|mid(|char (|xp_cmdshell|exec%20master|net%20localgroup%20administrators|"|../../image/bbs3000/whatchutalkingabout_smile.gifnet%20user|''|%20or%20)(.*)$/gi;
var e = re.test(url);
si(e) {
alert("La dirección contiene caracteres ilegales~");
ubicación.href="error.asp";
}
//-->
<guión>
[FIN DEL CÓDIGO]
Versión ASP del código para prevenir ataques de inyección SQL ~:
[INICIO DEL CÓDIGO]
<%
En caso de error Continuar siguiente
Dim strTemp
Si LCase(Request.ServerVariables("HTTPS")) = "apagado" Entonces
strTemp = "http://"
Demás
strTemp = "https://"
Fin si
strTemp = strTemp & Request.ServerVariables("SERVER_NAME")
Si Request.ServerVariables("SERVER_PORT") <> 80 Entonces strTemp = strTemp & ":" & Request.ServerVariables("SERVER_PORT")
strTemp = strTemp & Request.ServerVariables("URL")
If Trim(Request.QueryString) <> "" Entonces strTemp = strTemp & "?" & Trim(Request.QueryString)
strTemp = LCase(strTemp)
Si Instr(strTemp,"select%20") o Instr(strTemp,"insert%20") o Instr(strTemp, "delete%20from") o Instr(strTemp,"count() o Instr(strTemp,"drop%20table") o Instr(strTemp,"update%20") o Instr(strTemp,"truncate%20") o Instr(strTemp,"asc() o Instr(strTemp,"mid() o Instr(strTemp,"char() o Instr(strTemp,"xp_cmdshell") o Instr(strTemp,"exec%20master") o Instr(strTemp,"net%20localgroup%20administrators") o Instr(strTemp,":") o Instr(strTemp,"net%20user") o Instr(strTemp,"''") o Instr(strTemp,"%20or %20") entonces
Respuesta.Escribir "<lenguaje de escritura=''****''>"
Response.Write "alert(''¡Dirección ilegal!!'');"
Respuesta.Escribir "ubicación.href=''error.asp'';"
Respuesta.Escribir "<script>"
Terminar si
%>
Los siguientes son métodos de prevención relativamente simples. Estos son métodos con los que todos están familiarizados. Los acabo de publicar. Espero poder darte algo de ayuda ~
Principalmente para transferencia de variables numéricas:
identificación = Solicitud.QueryString ("identificación")
Si no (es numérico (id)) entonces
Respuesta.Escribe "Dirección ilegal~"
Respuesta.Fin
Terminar si