Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xanburzum

ASP - Anti SQL Inject

Recommended Posts

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> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.