Os ataques de injeção de SQL são causados por imperfeições nas instruções do nosso programa. Vamos dar uma olhada em como usar a função instr em asp para prevenir efetivamente ataques de injeção de SQL. A coisa específica deveria ser assim.
Se instr(Request(id), )>0 ou instr(Request(id),')>0 então response.redirect index.htm
Claro, você também pode escrever o que quiser depois disso!
Vamos primeiro aprender a função instr:
gramática
InStr([iniciar, ]string1, string2[, comparar])
A sintaxe da função InStr possui os seguintes parâmetros:
Descrição do parâmetro
começar é opcional. Expressão numérica que define a posição inicial de cada pesquisa. Se omitido, a pesquisa começará na posição do primeiro caractere. Se start contiver Null, ocorrerá um erro. Se comparar for especificado, o parâmetro start será obrigatório.
String1 é obrigatória. Aceita uma expressão de string para pesquisar.
String2
Obrigatório. A expressão de string a ser pesquisada.
Comparar é opcional. Um valor numérico que indica o tipo de comparação usado ao avaliar substrings. Consulte a seção Configurações para valores numéricos. Se omitido, uma comparação binária será realizada.
O parâmetro de comparação pode ter os seguintes valores:
Descrição do valor constante
vbBinaryCompare 0 Executa uma comparação binária.
vbTextCompare 1 Executa comparação de texto.
[valor de retorno]
A função InStr retorna os seguintes valores:
Se InStr retornar
string1 tem comprimento zero 0
string1 é Nulo Nulo
string2 é início de comprimento zero
string2 é Nulo Nulo
string2 não encontrada 0
Encontre string2 em string1 Encontre a posição da string correspondente
iniciar > Len(string2) 0
O exemplo a seguir utiliza a string de pesquisa InStr:
Dim SearchString, SearchChar, MyPos
SearchString =XXpXXpXXPXXP ' A string a ser pesquisada.
SearchChar = P ' Procura por P.
MyPos = Instr(4, SearchString, SearchChar, 1) 'A comparação de texto retorna 6 começando no quarto caractere.
MyPos = Instr(1, SearchString, SearchChar, 0) 'A comparação binária retorna 9 começando no primeiro caractere.
MyPos = Instr(SearchString, SearchChar) 'Retorna 9.
' O padrão é comparação binária (último argumento omitido).
MyPos = Instr(1, SearchString, W) 'A comparação binária retorna 0 começando no caracter 1 (W não encontrado).
Observe que a função InStrB usa os dados de bytes contidos na string, então InStrB não retorna a posição do caractere da primeira ocorrência de uma string em outra string, mas a posição do byte.
Resumo: A função de instr é: Retornar a posição da primeira ocorrência de um caractere ou string em outra string. Bem, vejamos qual código:
se instr(Request(id), )>0 ou instr(Request(id),')>0 então
Significado: Compare as posições específicas dos caracteres (espaço) e caracteres (') na solicitação (id) (comparação binária). Se os caracteres (espaço) e (') forem encontrados, então é a instrução depois disso!
Agora todos entendem o significado!
Quando vi pela primeira vez, falei: e se for em asp? Não é um erro cometer um erro ao adicionar caracteres (; ou,) e outros caracteres a Id = 90? (Sim, a resposta é sim :)
Talvez alguém tenha dito, então adicionarei alguns caracteres na instrução if instr(Request(id), )>0 ou instr(Request(id),')>0 then, por exemplo, altere-o para: if instr(Request (id ), )>0 ou instr(Request(id),')>0 ou instr(Request(id),;)>0 ou instr(Request(id),, )>0 então
Espere, você pode adicionar mais tarde, haha! (Isso é bom! Mas é pior :)
Sim, depois de adicionar isso, ele pode de fato derrotar alguns dos chamados hackers!
Na verdade, não é necessário. Você esqueceu a frase instr(Request(id), )>0? Enquanto existir esta frase, não seria inútil para os chamados hackers dizerem, e 1 = 1?