Injeção SQL para bases de dados
Tese: Injeção SQL para bases de dados. Pesquise 862.000+ trabalhos acadêmicosPor: vagueando • 6/6/2014 • Tese • 1.319 Palavras (6 Páginas) • 303 Visualizações
- Resolução -
Normalmente, as aplicações web fornecem interfaces para o usuário inserir as informações. Estas entradas de utilizador são posteriormente utilizadas para muitas finalidades um dos quais é a consulta das bases de dados. SQL injection é tentar introduzir esses dados através da interface de usuário do aplicativo web que daria a um usuário mal-intencionado a preciosa a informação para editar/modificar os dados protegidos ou travar todo o sistema, etc. Nos cenários de pior caso o usuário mal-intencionado é capaz de até mesmo penetrar na rede por comprometer a segurança da base de dados da máquina hospedeira.
Existem quatro categorias principais de ataques de injeção de SQL em bancos de dados
o SQL Manipulação: manipulação é o processo de modificar as instruções SQL usando várias operações, como UNIÃO. Outra maneira para a implementação de injeção SQL usando o método manipulação de SQL é alterando a cláusula WHERE da instrução SQL para obter resultados diferentes.
o Injeção de código: A injeção de código é o processo de inserção de novas instruções SQL ou comandos de banco de dados na instrução SQL vulnerável. Um dos ataques de injeção de código é um acrescenta um SQL Server executar o comando para a instrução SQL vulnerável. Este tipo de ataque só é possível quando várias instruções SQL por solicitação do banco de dados são suportadas.
o Chamada de função Injeção: Injeção de chamada de função é processo de inserção de várias funções de banco de dados chama em uma instrução SQL vulnerável. Essas chamadas de função poderiam ser chamadas do sistema operacional ng maki ou manipular os dados no banco de dados.
o Estouro de buffer: buffer overflow é causado pelo uso de injeção na função chamada. Para a maioria das bases de dados comerciais e de origem aberta, manchas estão disponíveis. Este tipo de ataque é possível quando o servidor está sem patch.
SQL INJECTION é uma técnica utilizada pra explorar aplicações web a partir da inserção de consultas SQL como parâmetros de execução destas aplicações. Apesar de ser notavelmente simples se implementar uma proteção contra este tipo de ataque, há um elevado número de sistemas conectados a Internet que ainda são totalmente vulneráveis (JOELSCAMBRAY2003). A Injeção ocorre quando ao ser encontrado um sistema com código inseguro, o atacante insere uma série de instruções SQL dentro de uma consulta (query), por meio da manipulação das entradas de dados de um sistema conectado a internet, conseguindo acesso não autorizado ao ambiente e suas informações, fazendo assim varias alterações na estrutura, como exclusão de colunas, mudança de senhas, alteração de notícias e até mesmo tirar o site de ar.
Exemplos de Ataque em PHP A melhor função para proteger seus sistemas em PHP e MySQL contra SQL Injection é a mysql_real_escape_string(), ela escapa os caracteres especiais como aspas simples e duplas antes de enviar para o banco de dados. Porém esta função não funciona em todas as versões do PHP, então na função que iremos criar temos quer verificar se ela existe, e caso não exista vamos utilizar a função mysql_escape_string(). Também devemos ter em mente que se a diretiva get_magic_quotes_gpc() estiver ON ele irá acrescentar barras invertidas automaticamente antes de aspas simples e duplas, o problema é que ele irá enviar para o banco de dados com as barras invertidas, estragando o texto. Para contornar isso basta usar a função stripslashes() para remover essas barras invertidas.
Então vamos montar a nossa função com o nome de anti_sql_injection(): function anti_sql_injection($str) { if (!is_numeric($str)) { $str = get_magic_quotes_gpc() ? stripslashes($str) : $str; $str = function_exists('mysql_real_escape_string') ? mysql_real_escape_string($str) : mysql_escape_string($str); } return $str; }
Note que em nossa função primeiro verificamos se a o valor informado não é numérico, ou seja, que precisa ser tratado, em seguida verificamos se a diretiva get_magic_quotes_gpc() está ativada, se estiver usamos a função stripslashes() conforme falado anteriormente. Em seguida verificamos se existe a função mysql_real_escape_string(), se existir usamos ela, caso contrário usamos a função mysql_escape_string(). Veja um exemplo de como usar a função: if ($_SERVER['REQUEST_METHOD'] == 'POST') { $usuario = trim($_POST['usuario']); $senha = trim($_POST['senha']); $sql = 'SELECT COUNT(id_usuario) '; $sql .= 'FROM usuarios '; $sql .= 'WHERE usuario = \'' . anti_sql_injection($usuario) . '\' ';
$sql .= 'AND senha = \'' . anti_sql_injection($senha) . '\' '; $query = mysql_query($sql) or die('Erro na consulta: ' . mysql_error()); $total = mysql_result($query, 0); if ($total > 0) { echo 'Usuário e senha corretos.'; } else { echo 'Usuário e/ou senha inválidos.'; } } Exemplos de Ataque em ASP No exemplo abaixo, demonstraremos em ASP as possíveis falhas que podem ocorrer nos websites. Utilizaremos abaixo um exemplo, iremos construir uma tabela de usuário com as seguintes colunas : - Login - varchar (255)
...