El ataque de inyección de SQL se refiere a explotar vulnerabilidades de diseño, ejecutar comandos SQL en los servidores de destino y otros ataques.
La razón principal por la cual el ataque de inyección SQL tiene éxito al generar dinámicamente los comandos SQL.
Por ejemplo:
Si su instrucción de consulta es seleccionar * de Admin Nombre de usuario = '"& User &"' 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 * de admin Where username = '1 o' 1 '=' 1 'y contraseña =' "& pwd &" '"
De esta manera, su declaración de consulta se aprobará y puede ingresar su interfaz de administración.
Por lo tanto, al prevenir, debe verificar la entrada del usuario. Los caracteres especiales especiales, como citas individuales, citas dobles, semicolones, comas, colons, conexiones, etc., se convierten o filtran.
Los caracteres especiales y las cadenas que deben filtrarse son:
usuario neto
xp_cmdshell
/agregar
EXEC Master.dbo.xp_cmdshell
Administradores netos de grupos locales
seleccionar
contar
Asc
carbonizarse
medio
'
:
"
insertar
eliminar de
mesa
actualizar
truncar
de
De %
¡A continuación hay dos códigos de prevención que escribí sobre resolver ataques de inyección para su referencia de aprendizaje!
Versión JS del código de ataque de inyección SQL ~:
[Código Inicio]
<script language = "javaScript">
<!-
var url = ubicación.search;
var re =/^/? (.*) (Seleccione%20 | Insertar%20 | Eliminar%20FROM 20 | Conde/(| Drop%20Table | ACTUALIZACIÓN%20trate%20 | ASC/(| Mid/(| Char/ (| XP_CMDSHELL | EXEC%20MASTER | NET%20LocalGroup%20administradores |/"|: | neto%20user |/'|%20or%20) (.*) $/gi;
var e = re.test (url);
if (e) {
alerta ("La dirección contiene caracteres ilegales ~");
ubicación.href = "error.asp";
}
//->
<script>
[Fin de código]
Versión ASP del código para evitar ataques de inyección SQL ~:
[Código Inicio]
<%
En el currículum de error siguiente
Dim strtemp
Si lcase (request.servervariables ("https")) = "apagado" entonces
strtemp = "http: //"
Demás
strtemp = "https: //"
Final si
strtemp = strtemp & request.ServerVariAbles ("server_name")
If request.serverVariables ("server_port") <> 80 entonces strtemp = strtemp & ":" & request.servervariables ("server_port")
strtemp = strtemp & request.ServerVariables ("URL")
Si TRIM (request.queryString) <> "" entonces strtemp = strtemp & "?"
strtemp = lcase (strtemp)
Si instrer (strtemp, "seleccionar%20") o instr (strtemp, "insertar%20") o instrer (strtemp, "eliminar%20 de") o instrer %20Table ") o Instr (strtemp," actualización%20 ") o instrer (strtemp," truncate%20 ") o instrer (strtemp," asc (") o instrer (strtemp," mid (") o instr (strtemp , "char (") o Instr (strtemp, "xp_cmdshell") o Instrer (strtemp, "ejecut%20master") o instr (strtemp, "net%20localgroup%20administrators") o instrer (strtemp, ":") o instr (strtemp, "net%20user") o instrer (strtemp, "" ") o Instr (strtemp,"%20or%20 ") Entonces
Response.write "<script language = 'javaScript'>"
Response.write "Alert ('Dirección ilegal !!');"
Response.write "Location.href = 'Error.asp';"
Response.write "<Script>"
Final si
%>
[Fin de código]
C# Verifique las cadenas para evitar ataques de inyección de SQL
En este ejemplo, se especifica tentativamente como = y 'números
bool checkParams (objeto params [] args)
{
String [] Lawlesses = {"=", "'"};
if (Lawlesses == null || Lawlesses.length <= 0) return true;
// Construye expresiones regulares, ejemplo: Lawlesses es el = signo y el "signo, entonces la expresión regular es.* [=} '].* (Para el contenido relacionado de las expresiones regulares, consulte MSDN)
// Además, dado que quiero hacer funciones generales y fáciles de modificar, tengo otro paso de la matriz de personajes a las expresiones regulares.
cadena str_regex = ".*[";
para (int i = 0; i <Lawlesses.length-1; i ++)
str_regex+= Lawlesses [i]+"|";
str_regex+= Lawlesses [Lawlesses.length-1]+"].*";
//
foreach (objeto arg en args)
{
if (arg es cadena) // Si es una cadena, verifique directamente
{
if (regex.matches (arg.ToString (), str_regex) .count> 0)
devolver falso;
}
else if (arg es iCollection) // Si es una colección, verifique si el elemento en la colección es una cadena.
{
foreach (objeto obj en (iCollection) arg)
{
if (obj es cadena)
{
if (regex.matches (obj.ToString (), str_regex) .count> 0)
devolver falso;
}
}
}
}
devolver verdadero;