Hackers \"profissionais\" não acharão graça alguma neste tutorial. É mais para quem está iniciando no assunto.
Além de mostrar as técnicas de \"ataque\", vou mostrar também técnicas de \"defesa\".
A linguagem aqui utilizada é PHP.
Mas, primeiramente, o que é SQL?
Instruções SQL são códigos que instruem o sistema a acessar um banco de dados (database). Um banco de dados é onde ficam guardados os dados dinâmicos de um site. Um exemplo de banco de dados é o Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
Vamos ver, então, como o desenvolvedor faria para verificar um login e uma senha:
Então, os dados do formulário são diretamente jogados na instrução SQL. Mas, e se, ao invés de login e senha, colocássemos mais instruções SQL?
Vamos colocar então a seguinte string:
No campo da senha, que é o último. Então, a instrução SQL ficará assim:
SELECT * FROM users WHERE user = '' AND senha = '' or 1='1'
Então, \"traduzindo\", verificamos se o usuário e a senha se correspondem ou se 1 é igual a 1. Então, mesmo que o login e a senha estejam incorretos, como 1=1, efetuamos login normalmente.
Claro que há muito mais o que fazer. Com o SQLi é possível entrar em áreas privilegiadas, como a área de administração de um site, mas estudando um pouco mais, ainda apenas inserindo mais instruções SQL, também é possível ver todo o banco de dados, alterar dados e até estar no shell do servidor.
Mas, como \"ao atacar não podemos ser atacados\", vou mostrar aqui um exemplo de como seria a defesa: o simples uso da função addslashes(), que coloca uma barra invertida antes de cada aspa, tornando-a inválida e não-literal. Assim, a instrução SQL ficaria segura e não poderiam ser inclusos novos pedaços de código. Veja:
SELECT * FROM users WHERE user = '' AND senha = '\' or 1='1'
Também há outras funções, como a stripslashes(), mysql_real_escape_string() etc.
Apesar da simplicidade da proteção, a maioria dos desenvolvedores não a aplicam. E o pior: a humanidade não sabe o porque disso.
Também é interessante adicionar criptografia hash nas senhas, tais como MD5(), Sha1() etc.
Não repitam as ações maléficas citadas no texto. Caráter acadêmico. \"Seus atos estão sob sua responsabilidade.\"
Além de mostrar as técnicas de \"ataque\", vou mostrar também técnicas de \"defesa\".
A linguagem aqui utilizada é PHP.
Mas, primeiramente, o que é SQL?
Instruções SQL são códigos que instruem o sistema a acessar um banco de dados (database). Um banco de dados é onde ficam guardados os dados dinâmicos de um site. Um exemplo de banco de dados é o Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
Vamos ver, então, como o desenvolvedor faria para verificar um login e uma senha:
Código PHP:
<?php
# Aqui, a variável $user equivale ao dado do campo "user" no formulário. O mesmo ocorre com a senha.
$user = $_POST['user'];
$pass = $_POST['pass'];
#Agora, da tabela "users", vamos ver se usuario e senha são correspondentes.
$query = "SELECT * FROM users
WHERE user='{$user}' AND senha='{$senha}'";
Vamos colocar então a seguinte string:
Código:
' or 1='1
SELECT * FROM users WHERE user = '' AND senha = '' or 1='1'
Então, \"traduzindo\", verificamos se o usuário e a senha se correspondem ou se 1 é igual a 1. Então, mesmo que o login e a senha estejam incorretos, como 1=1, efetuamos login normalmente.
Claro que há muito mais o que fazer. Com o SQLi é possível entrar em áreas privilegiadas, como a área de administração de um site, mas estudando um pouco mais, ainda apenas inserindo mais instruções SQL, também é possível ver todo o banco de dados, alterar dados e até estar no shell do servidor.
Mas, como \"ao atacar não podemos ser atacados\", vou mostrar aqui um exemplo de como seria a defesa: o simples uso da função addslashes(), que coloca uma barra invertida antes de cada aspa, tornando-a inválida e não-literal. Assim, a instrução SQL ficaria segura e não poderiam ser inclusos novos pedaços de código. Veja:
SELECT * FROM users WHERE user = '' AND senha = '\' or 1='1'
Também há outras funções, como a stripslashes(), mysql_real_escape_string() etc.
Apesar da simplicidade da proteção, a maioria dos desenvolvedores não a aplicam. E o pior: a humanidade não sabe o porque disso.
Também é interessante adicionar criptografia hash nas senhas, tais como MD5(), Sha1() etc.
Não repitam as ações maléficas citadas no texto. Caráter acadêmico. \"Seus atos estão sob sua responsabilidade.\"
Comment