ANDROID

[ANDROID][bsummary]

FACEBOOK

[FACEBOOK][twocolumns]

NOTÍCIAS

[NOTÍCIAS][bleft]

KALI LINUX

[KALI LINUX][grids]

Como evitar o ataque de injeção SQL no ASP.NET

Você deve validar toda a entrada para seu aplicativo ASP.NET para o tipo, comprimento, formato e alcance da entrada. Ao restringir a entrada usada em sua consulta de acesso a dados, você pode proteger seus aplicativos da injeção SQL


Comece restringindo entradas no código do lado do servidor para suas páginas da Web do ASP.NET. Não confie nas validações do lado do cliente porque pode ser facilmente ignorado. Use as validações do lado do cliente apenas para reduzir viagens redondas e melhorar a experiência do usuário.
Se, no exemplo de código anterior, o valor SSN for capturado por um controle de TextBox ASP.NET , você pode restringir sua entrada usando um controle RegularExpressionValidator , como mostrado a seguir.
& Lt ;% @ language = "C #" % & gt ; & Lt ; Form id = "form1" runat = "server" & gt ; & Lt ; Asp : TextBox ID = "SSN" runat = "servidor" / & gt ; & Lt ; asp : RegularExpressionValidator ID = "regexpSSN" runat = "server" ErrorMessage = "Número de SSN incorreto" ControlToValidate = "SSN" ValidationExpression = "^ \ d {3} - \ d {2} - \ d {4} $" / & gt ; & Lt ; / form & gt ; 

    
             
                                     
                                             
                                     
Se as entradas SSN forem provenientes de outra fonte, como um controle HTML, parâmetros de uma seqüência de consulta ou um cookie, você pode restringi-lo usando a classe Regex dos namespaces System.Text.RegularExpressions. O exemplo a seguir pressupõe que a entrada é obtida a partir de um cookie.
Usando System.Text.RegularExpressions;
Se ( Regex . IsMatch ( Request . Cookies [ "SSN" ], "^ \ d {3} - \ d {2} - \ d {4} $ )) { // acessar os bancos de dados } else { // handle As entradas ruins }  

    



    

Restringir entrada em códigos de acesso a dados

Em algumas situações semelhantes, você precisa fornecer validação em seus códigos de acesso a dados, talvez além das suas validações de nível de página do ASP.NET. Duas situações comuns em que você precisa fornecer a validação em seus códigos de acesso a dados são:
  • Clientes não confiáveis. Se os dados podem vir de fontes não confiáveis ​​ou você não pode garantir quão bem os dados foram validados e restringidos, adicione a lógica de validação que restringe a entrada às rotinas de acesso a dados.
  • Código da biblioteca. Se seus códigos de acesso a dados forem embalados como uma biblioteca projetada para uso por vários aplicativos, seu código de acesso a dados deve executar suas próprias validações, pois você não pode fazer pressupostos seguros sobre o aplicativo cliente.
O exemplo a seguir mostra como as rotinas de acesso a dados podem validar seus parâmetros de entrada ao usar expressões regulares antes de usar os parâmetros em uma instrução SQL.
Usando o sistema ; Usando o sistema . Texto . RegularExpressions ; 
 

Public void CreateNewUserAccount ( nome da string , senha da string ) { // O nome da verificação contém somente casos inferiores ou maiúsculas, // o apóstrofo, um ponto ou espaço em branco. Verifique se é // entre 1 e 40 caracteres de comprimento se ( ! Regex . IsMatch ( userIDTxt . Text , @ "^ [a-zA-Z './ s] {1,40} $" )) lança nova FormatException ( "Formato de nome inválido" );   

    
    
    
       
        

    Se ( ! Regex . IsMatch ( passwordTxt . Text , @ "^ (? =. * \ D) (? =. * [Az]) (? =. * [AZ]). {8,10} $" )) lançar nova FormatException ( "formato de senha inválida" );   
                       
        

 }
O código a seguir mostra como usar SqlParameterCollection ao chamar um procedimento armazenado.
Usando o sistema . Dados ; Usando o sistema . Dados . SqlClient ; 
 

Usando ( conexão SqlConnection = novo SqlConnection ( connectionString )) { DataSet userDataset = new DataSet (); SqlDataAdapter myCommand = novo SqlDataAdapter ( "LoginStoredProcedure" , conexão ); 
  MyCommand . SelectCommand . CommandType = CommandType . StoredProcedure ; 
  MyCommand . SelectCommand . Parâmetros . Adicionar ( "@au_id" , SqlDbType . VarChar , 11 ); 
  MyCommand . SelectCommand . Parâmetros [ "@au_id" ]. Valor = SSN . Texto ;   

    
     
                  

  MyCommand . Preencha ( userDataset ); }
Nesse caso, os parâmetros @au_id são tratados como um valor literal e não como código executável. Além disso, o parâmetro é verificado quanto ao tipo e comprimentos. No exemplo de código anterior, o valor de entrada não pode ter mais de 11 caracteres. Se os dados não estiverem de acordo com o tipo ou comprimento definido pelo parâmetro, a classe SqlParameter lança exceções.

Usando parâmetros de lotes

Um equívoco comum é que se você concatenou várias instruções SQL para enviar um lote de instruções para o servidor em uma única viagem de ida e volta, você não pode usar o parâmetro. No entanto, você pode usar esta técnica se você certificar-se de que os nomes dos parâmetros não são repetidos. Você pode facilmente fazer isso, certificando-se de que você usa nomes de parâmetros únicos durante a concatenação de texto SQL, como mostrado aqui.
Usando o sistema . Dados ; Usando o sistema . Dados . SqlClient ; . . . Usando ( SqlConnection connection = new SqlConnection ( connectionString )) { SqlDataAdapter dataAdapter = novo SqlDataAdapter ( "SELECT CustomerID INTO # Temp1 FROM Customers" + "WHERE CustomerID & gt; @custIDParm; SELECT CompanyName FROM Customers" + "WHERE Country = @countryParm e CustomerID IN " + " (SELECIONE ID de cliente de # Temp1); SqlDbType . NChar , 5 ); 
  CustIDParm . Valor = ID do cliente . Texto ; SqlDbType . NChar , 5 ); CustIDParm . Valor = ID do cliente . Texto ; 
 
  
   

    
        
        
        
       
  
                                             

  SqlParameter countryParm = dataAdapter . SelectCommand . Parâmetros . Adicionar ( "@countryParm" , SqlDbType . NVarChar , 15 ); 
  CountryParm . Valor = país . Texto ;
                                         

  Conexão . Abrir (); DataSet dataSet = novo DataSet (); 
  DataAdapter . Encha ( dataSet ); }
    

  
Leve o seu tempo para comentar este artigo.
0 comentários via Blogger
comentários via Facebook

Nenhum comentário :