Este é o código faz a filtragem principal. Copie o código abaixo em um arquivo ASP e modifique de acordo com suas necessidades. Os itens principais que você precisa adicionar / modificar para suas necessidades é na matriz BlackList e o ErrorPage, caso você queira encaminhar. Implemente este arquivo em um local que será acessível a todos os seus aplicativos da web. Certifique-se de que o caminho para a sua página de erro está correta. Use um caminho completo aqui, se possível, uma vez que este código vai ficar incluído em várias aplicações que podem residem em diferentes diretórios físicos.
SqlCheckInclude.asp
<% ' SqlCheckInclude.asp ' ' Este é o arquivo de inclusão para usar com seus asp para ' Validar a entrada de SQL inject. Dim BlackList, ErrorPage, s ' ' Abaixo está uma lista negra que irá bloquear certos comandos SQL e ' Sequências utilizadas na SQL inject vai ajudar com sanitização de entrada ' ' No entanto, este não é pode ser suficiente , porque:: ' 1) Estes podem não cobrir todos os casos ( como caracteres codificados ) ' 2) Isto pode não permitir a entrada legítima ' ' Criando uma raw sql query strings concatenando a entrada do usuário é ' Uma prática de programação insegura . É aconselhável que você use SQL parametrizado ' em seu lugar. Verifique http://support.microsoft.com/kb/q164485/ para obter informações ' Sobre a forma de fazer isso usando o ADO do ASP. ' ' Além disso , é preciso também implementar uma lista branca para os seus parâmetros. ' Por exemplo, se você está esperando a entrada de um código postal você deve criar ' A regra de validação que só irá permitir que 5 caracteres em [0-9]. ' BlackList = Array("--", ";", "/*", "*/", "@@", "@",_ "char", "nchar", "varchar", "nvarchar",_ "alter", "begin", "cast", "create", "cursor",_ "declare", "delete", "drop", "end", "exec",_ "execute", "fetch", "insert", "kill", "open",_ "select", "sys", "sysobjects", "syscolumns",_ "table", "update","xp_", "#", "%", "&", "'", "(", ")", "/", "\", ":", ";", "<", ">", "=", "[", "]", "?", "`", "|") ' Preencher a página de erro que você quer redirecionar para no caso de o ' Verificação falhar. ErrorPage = "/ErrorPage.asp" ''''''''''''''''''''''''''''''''''''''''''''''''''' ' Esta função não verifica se há caracteres codificados ' uma vez que não sei a forma de codificação de sua aplicação ' usa. Adicione a lógica apropriada para lidar com caracteres codificados aqui. ''''''''''''''''''''''''''''''''''''''''''''''''''' Function CheckStringForSQL(str) On Error Resume Next Dim lstr ' Se a seqüência estiver vazia, retornar true If ( IsEmpty(str) ) Then CheckStringForSQL = false Exit Function ElseIf ( StrComp(str, "") = 0 ) Then CheckStringForSQL = false Exit Function End If lstr = LCase(str) ' Verifique se a seqüência contém quaisquer padrões em nossa Lista negra For Each s in BlackList If ( InStr (lstr, s) <> 0 ) Then CheckStringForSQL = true Exit Function End If Next CheckStringForSQL = false End Function ''''''''''''''''''''''''''''''''''''''''''''''''''' ' Check forms data ''''''''''''''''''''''''''''''''''''''''''''''''''' For Each s in Request.Form If ( CheckStringForSQL(Request.Form(s)) ) Then ' Redireciona para error page Response.Redirect(ErrorPage) End If Next ''''''''''''''''''''''''''''''''''''''''''''''''''' ' Check query string ''''''''''''''''''''''''''''''''''''''''''''''''''' For Each s in Request.QueryString If ( CheckStringForSQL(Request.QueryString(s)) ) Then ' Redireciona para error page Response.Redirect(ErrorPage) End If Next ''''''''''''''''''''''''''''''''''''''''''''''''''' ' Check cookies ''''''''''''''''''''''''''''''''''''''''''''''''''' For Each s in Request.Cookies If ( CheckStringForSQL(Request.Cookies(s)) ) Then ' Redireciona para error page Response.Redirect(ErrorPage) End If Next ''''''''''''''''''''''''''''''''''''''''''''''''''' ' Adicionar verificações adicionais para a entrada que seu aplicativo ' usa. (por exemplo, vários cabeçalhos de requisição de seu aplicativo ' Poderia usar) ''''''''''''''''''''''''''''''''''''''''''''''''''' %>
Paginateste.asp
Este é um exemplo que mostra como "incluir" o script acima em sua página. Certifique-se o caminho para o arquivo de inclusão está correto. O exemplo abaixo é para sua página e o arquivo de inclusão estar no mesmo diretório. Certifique-se de modificar o caminho , se estes dois não estão no mesmo diretório.
<% ' Paginateste.asp ' ' Este é um arquivo para testar o arquivo SQLCheckInclude . A idéia aqui é que você 'adicione o arquivo de inclusão para o início de todas as páginas asp para obter a validação de entrada de injeção SQL %> <!--#include file="SqlCheckInclude.asp"--> <% Response.Write("Bem-vindo à página de teste.") Response.Write("Se você está vendo esta página, então a validação SQL sucedeu.") %>
ErrorPage.asp
Se uma ' lista negra ' de string é encontrada em qualquer entrada , esta é a página que você será encaminhado. Você pode reutilizar qualquer página de erro personalizada que você já tem para isso. Estou incluindo esta só por uma questão de completude.
<% ' ErrorPage.asp ' ' Esta é a página de erro que os usuários serão redirecionados para se a entrada não pode ser validada %> <%Response.Write("ERRO: Entrada inválida")%>
SendEmail.asp
Este script envia e-mail através de um servidor SMTP remoto que usa credenciais. Você vai precisar integrar esta em sua aplicação no lugar certo para obter o relatório de erros via e-mail.
<% ' SendEmail.asp Function SendEmail(email, msg) On Error Resume Next ' Se a seqüência estiver vazia, retornar falso If ( IsEmpty(email) ) Then SendEmail = false Exit Function ElseIf ( StrComp(email, "") = 0 ) Then SendEmail = false Exit Function End If Set cdoConfig = CreateObject("CDO.Configuration") With cdoConfig.Fields .Item(cdoSendUsingMethod) = cdoSendUsingPort ' Preencha o nome do servidor para o servidor SMTP remoto e suas credenciais .Item(cdoSMTPServer) = "smtpserver.foo.com" .Item(cdoSMTPAuthenticate) = 1 .Item(cdoSendUsername) = "username" .Item(cdoSendPassword) = "password" .Update End With Set cdoMessage = CreateObject("CDO.Message") With cdoMessage ' Preencha as informações do remetente Set .Configuration = cdoConfig .From = "seu@email.com" .To = email .Subject = "Teste de Email" .TextBody = msg .Send End With Set cdoMessage = Nothing Set cdoConfig = Nothing SendEmail = true End Function %> <FORM VERB=POST METHOD="POST"> A página de teste para verificação de entrada com possível injeção de SQL. <br><br> Email: <INPUT NAME=Email></INPUT><BR> Mensagem: <INPUT NAME=Message></INPUT><BR> Enviado: <% = SendEmail(Request("Email"),Request("Message")) %><BR> <BUTTON TYPE=SUBMIT>Submit</BUTTON> </FORM>