quinta-feira, 7 de março de 2013

C# - Função contra SQL Injection (Injeção de SQL)



















A Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entradas de dados de uma aplicação. Para mais detalhes sobre SQL Injection clique aqui.

Hoje todas as linguagens de programação já oferecem suporte para passar parâmetros em uma query, ao invés de concatena-la, o que acaba impedindo os ataques de injeção SQL.

Mas paralelo a isso, eu particularmente ainda utilizo bastante a concatenação de strings, para evitar o ataque de Injeção SQL criei uma simples função em C# que elimina os termos que podem ser considerados perigosos para o nosso banco de dados, e vou compartilhar essa função com vocês.
public static string Sanatization(string str)
        { 
            //Função simples para evitar ataques de injeção SQL
            if (str == string.Empty || str == "")
                return str;

            string sValue = str;

            //Valores a serem substituidos
            sValue = sValue.Replace("'", "''");
            sValue = sValue.Replace("--", " ");
            sValue = sValue.Replace("/*", " ");
            sValue = sValue.Replace("*/", " ");
            sValue = sValue.Replace(" or ", "");
            sValue = sValue.Replace(" and ", "");
            sValue = sValue.Replace("update", "");
            sValue = sValue.Replace("-shutdown", "");
            sValue = sValue.Replace("--", "");
            sValue = sValue.Replace("'or'1'='1'", "");
            sValue = sValue.Replace("insert", "");
            sValue = sValue.Replace("drop", "");
            sValue = sValue.Replace("delete", "");
            sValue = sValue.Replace("xp_", "");
            sValue = sValue.Replace("sp_", "");
            sValue = sValue.Replace("select", "");
            sValue = sValue.Replace("1 union select", "");
   
   //Retorna o valor com as devidas alterações
            return sValue;

        }

Um comentário: