MySQL Injection é ato de inserir declaração MySQL em um banco de dados sem o conhecimento do proprietário do banco de dados . Ele geralmente é feito através da exploração de campos de entrada de usuários que não são protegidos adequadamente. Em vez de fornecer entrada real de que proprietário do banco de dados pediu , o usuário injeta uma instrução MySQL que muda o comportamento da consulta para dar a capacidade do usuário injeção para manipular o banco de dados. Injeções MySQL
A maneira mais fácil de entender e aprender o que realmente injeção MySQL doesis para dar uma olhada em um exemplo. Uma das maneiras mais populares de usar MySQLinjections é ignorar as verificações de login em sites . Aqui está um exemplo de awebsite que está usando o seguinte formulário para autenticar o usuário :
depois de pressionar enviar dados inseridos é, então, enviado para a página userlogin.php que recebe e passa por uma consulta no banco de dados para verificar o nível de acesso do usuário tem e se ele entrou no nome de usuário e senha corretamente.
< ? $ username = $ _POST [ 'username' ]; $ password = $ _POST [ 'password' ]; $ query = "SELECT nome de usuário , senha FROM utilizadores WHERE username = '$ username' e senha = '$ senha '"; ? >
Esse tipo de formulário de login é aberta à exploração por ataques de injeção de MySQL . Para ter acesso ao site a qualquer usuário pode inserir o seguinte código: 'OR 1 = 1 - o nome de usuário e' OR 1 = 1 para senha
consulta vai ficar assim : $ query = "SELECT nome de usuário . , senha FROM utilizadores WHERE username = '' oR 1 = 1 - ' e senha ='' oR 1 = 1 ";
Esta consulta irá selecionar nome de usuário e senha de usuários onde não existem nomes de usuário ou senha ( '' parte) ou se um é igual a um. Como um é igual a um , em todos os casos, a segurança da base de dados fica comprometida . Dois traços antes apóstrofo foram adicionados para tornar MySQL ignorar apóstrofo que é agora redundante. Este é apenas um tipo de ataque usando injeção MySQL . Outra variação deste ataque é getaccess para mais informações do que é permitido ao usuário .
Agora olhar para um exemplo onde o proprietário do banco de dados está usando o seguinte queryto obter dados para exibição em informações da conta do usuário da página .
$ query = "SELECT * FROM utilizadores WHERE username = '$ nome '";
Se esse tipo de consulta não está protegido usuário mal-intencionado é capaz de input'OR 1 = 1 - a verificação de nome de usuário manual. $ query = "SELECT * FROM utilizadores WHERE username = '' OR 1 = 1 - '"; Esta consulta agora não vai selecionar apenas os dados do usuário , mas os dados de todos os usuários na tabela "usuários "
< br. >
proteção contra MySQL injeções
Há muitas maneiras de se proteger contra injeções MySQL . Na verdade injeções MySQL são ameaças só se o desenvolvedor ignorou a ameaça e falharam em proteger seu código. A maneira mais fácil de proteger contra injeções em PHP e MySQL combinação é usar a função PHP: . . ? " Mysql_real_escape_string "
Voltando ao primeiro exemplo <$ username = $ _POST [ 'username' ]; $ password = $ _POST [ 'password' ]; $ query = "SELECT nome de usuário , senha FROM utilizadores WHERE username = '$ username' e senha = '$ senha '"; ? >
Para se proteger contra injeções MySQL usos diretos de entradas do usuário deve befiltered através de " mysql_real_escape_string " . . ? Function " mysql_real_escape_string " escaparão todos os caracteres especiais MySQL removendo possibilidade de mudar o comportamento de nossa consulta
< $ username = mysql_real_escape_string ( $ _POST [ 'username' ]); $ password = mysql_real_escape_string ( $ _POST [ ,"'password' ]); $ query = "SELECT nome de usuário , senha FROM utilizadores WHERE username = '$ username' e senha = '$ senha '"; >