Os ataques de injeção de SQL referem-se à exploração de vulnerabilidades de design para executar comandos SQL no servidor de destino e executar outros ataques para gerar comandos SQL dinamicamente sem verificar os dados inseridos pelo usuário. Esta é a principal razão pela qual os ataques de injeção de SQL são bem-sucedidos.
por exemplo:
Se sua instrução de consulta for selecione * de admin onde nome de usuário=''"&user&"'' e senha=''"&pwd&"''"
Então, se meu nome de usuário for: 1'' ou ''1''=''1
Então, sua declaração de consulta se tornará:
selecione * de admin onde nome de usuário=''1 ou ''1''=''1'' e senha=''"&pwd&"''"
Desta forma, sua instrução de consulta será aprovada e você poderá entrar em sua interface de gerenciamento.
Portanto, a entrada do usuário precisa ser verificada ao tomar precauções. Converta ou filtre alguns caracteres especiais, como aspas simples, aspas duplas, ponto e vírgula, vírgula, dois pontos, números de conexão, etc.
Os caracteres especiais e strings que precisam ser filtrados são:
usuário líquido
xp_cmdshell
/adicionar
exec master.dbo.xp_cmdshell
administradores de grupo local da rede
selecione
contar
Asc
personagem
meio
''
:
"
inserir
excluir de
tabela suspensa
atualizar
truncar
de
%
A seguir estão dois códigos de prevenção que escrevi sobre como resolver ataques de injeção para sua referência!
js do código para evitar ataques de injeção de SQL:
<linguagem de script="****">
<!--
var url = localização.pesquisa;
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.teste(url);
se(e) {
alert("O endereço contém caracteres ilegais~");
localização.href="erro.asp";
}
//-->
<roteiro>
[CÓDIGO FIM]
Versão ASP do código para evitar ataques de injeção de SQL ~:
[CÓDIGO INÍCIO]
<%
Em caso de erro, retomar o próximo
Dim strTemp
If LCase(Request.ServerVariables("HTTPS")) = "off" Then
strTemp = "http://"
Outro
strTemp = "https://"
Fim se
strTemp = strTemp & Request.ServerVariables("SERVER_NAME")
If Request.ServerVariables("SERVER_PORT") <> 80 Então strTemp = strTemp & ":" & Request.ServerVariables("SERVER_PORT")
strTemp = strTemp & Request.ServerVariables("URL")
If Trim(Request.QueryString) <> "" Então strTemp = strTemp & "?" & Trim(Request.QueryString)
strTemp = LCase(strTemp)
If Instr(strTemp,"select%20") ou Instr(strTemp,"inserir%20") ou Instr(strTemp, "delete%20from") ou Instr(strTemp,"count() ou Instr(strTemp,"drop%20table") ou Instr(strTemp,"update%20") ou Instr(strTemp,"truncate%20") ou Instr(strTemp,"asc(") ou Instr(strTemp,"mid(") ou Instr(strTemp,"char(") ou Instr(strTemp,"xp_cmdshell") ou Instr(strTemp,"exec%20master") ou Instr(strTemp,"net%20localgroup%20administrators") ou Instr(strTemp,":") ou Instr(strTemp,"net%20user") ou Instr(strTemp,"''") ou Instr(strTemp,"%20or %20") então
Response.Write "<linguagem de script=''****''>"
Response.Write "alert(''Endereço ilegal!!'');"
Response.Write "location.href=''error.asp'';"
Resposta.Escreva "<script>"
Terminar se
%>
A seguir estão métodos de prevenção relativamente simples. São métodos com os quais todos estão familiarizados. Espero poder te ajudar ~
Principalmente para transferência de variáveis numéricas:
id = Request.QueryString("id")
Se não(isNumeric(id)) Então
Response.Write "Endereço ilegal ~"
Resposta.Fim
Terminar se