Olá meu povo do XPZone, a pedido do abuzado vim trazer umas leves dicas para orientar aos mais leigos e diminuindo a possibilidade de suas web sejam "invadidas" por Sql-Injection.
Bom primeiramente tem que saber o que é Sql-Injection.
Sql-Injection nada mais é que uma tentativa ou aproveitamento de vulnerabilidades de campos ou link no caso de um site, nesses campos são inserindo códigos maliciosos na tentativa de invasão do seu site se aproveitando da falta de tratamento das entradas de dados do site.
Ex: Formulário de Login.
Como podemos evitar isso?
Muito simples tratando as entradas do seu site que são usadas em consultas no banco de dados.
Caso você use o método antigo de conexão como algo assim:
define("DBHOST", "localhost");
define("DBUSER", "root");
define("DBPASS", "");
define("DBNAME", "meu_site");
if(!($id = mysql_connect(DBHOST, DBUSER, DBPASS))){
echo "Não foi possivel conectar-se ao servidor!";
}else{
mysql_select_db(DBNAME);
}
Basta tratar as entradas, uma das formas de tratamento seria assim:
Formulário de login:
<form id="" method="POST">
<input type="text" name="nome" id="nome" placeholder="Nome" />
<br />
<input type="password" name="senha" id="senha" placeholder="Senha" />
<br />
<input type="submit" id="enviar" placeholder="Enviar" />
</form>
Quando formos recuperar os valores inseridos nos campos a cima utilizamos simplesmente a função addslashes que adiciona barras invertidas na string e mysql_real_escape_string que remove caracteres especiais SQL da string...
Como ficaria o nosso arquivo de login.php:
require_once "config.php";
//RECUPERA O CAMPO NOME DO FORMULÁRIO E ADICIONA AS BARRAS
$nome = addslashes(mysql_real_escape_string($_POST['nome']));
//RECUPERA O CAMPO SENHA DO FORMULÁRIO E ADICIONA AS BARRAS
$senha = addslashes(mysql_real_escape_string$_POST['senha']));
...
Isso fazendo isso evitará sql-injection em seus campos.
Mas ainda há um método mais seguro que esse que é utilizando o PDO que ternam as suas consultas no banco de dados mais segura do que a usada normalmente como no exemplo abaixo:
$sql = $pdo->prepare("SELECT * FROM usuario WHERE login = ? AND senha = ?");
$sql->bind_param(1, $_POST['nome'], PDO:ARAM_STR);
$sql->bind_param(2, $_POST['senha'], PDO:ARAM_STR);
$sql->execut();
Bom na primeira linha ele recebe vemos que é um String SQL normal...mas note que tem "?" no local onde seria uma variável para a consulta, essas "?" são mascaras e utilizando o bind_param para substituir a "?" pelo valor correto e efetuar a consulta
Note que na segunda e terceira linha tem um número o valor recuperado do formulário e outra função.
Bom no primeiro campo representa a ordem em sua sequencia das "?" o segundo parâmetro é a variável que recupera o valor do formulário e o terceiro parâmetro é o tipo da entrada, bom esse terceiro parâmetro não é obrigado mas eu prefiro colocar ^^
E por fim o execut que como o nome já diz executa o comando sql no banco de dados, o que torna a segunda opção mais segura que a primeira ou então crie uma função que identifique comandos SQL.
Bom pessoal é isso espero que gostem : )
Sugestões dicas melhorias do post comentem abaixo, se gostaram clickem em like se não gostaram também clicke no like e comente o que não te agradou só não vale xingar huahua
Créditos:
_kinght_ -> a pedido do mano abuzado : )
OBS: Tutorial / Dica feito exclusivamente para XPZone.net, caso alguém resolva publicar esse post em outro fórum coloque os créditos de quem criou o tópico no caso eu "_kinght_" e de qual fórum você copiou o post "xpzone.net".
Bom primeiramente tem que saber o que é Sql-Injection.
Sql-Injection nada mais é que uma tentativa ou aproveitamento de vulnerabilidades de campos ou link no caso de um site, nesses campos são inserindo códigos maliciosos na tentativa de invasão do seu site se aproveitando da falta de tratamento das entradas de dados do site.
Ex: Formulário de Login.
Como podemos evitar isso?
Muito simples tratando as entradas do seu site que são usadas em consultas no banco de dados.
Caso você use o método antigo de conexão como algo assim:
define("DBHOST", "localhost");
define("DBUSER", "root");
define("DBPASS", "");
define("DBNAME", "meu_site");
if(!($id = mysql_connect(DBHOST, DBUSER, DBPASS))){
echo "Não foi possivel conectar-se ao servidor!";
}else{
mysql_select_db(DBNAME);
}
Basta tratar as entradas, uma das formas de tratamento seria assim:
Formulário de login:
<form id="" method="POST">
<input type="text" name="nome" id="nome" placeholder="Nome" />
<br />
<input type="password" name="senha" id="senha" placeholder="Senha" />
<br />
<input type="submit" id="enviar" placeholder="Enviar" />
</form>
Quando formos recuperar os valores inseridos nos campos a cima utilizamos simplesmente a função addslashes que adiciona barras invertidas na string e mysql_real_escape_string que remove caracteres especiais SQL da string...
Como ficaria o nosso arquivo de login.php:
require_once "config.php";
//RECUPERA O CAMPO NOME DO FORMULÁRIO E ADICIONA AS BARRAS
$nome = addslashes(mysql_real_escape_string($_POST['nome']));
//RECUPERA O CAMPO SENHA DO FORMULÁRIO E ADICIONA AS BARRAS
$senha = addslashes(mysql_real_escape_string$_POST['senha']));
...
Isso fazendo isso evitará sql-injection em seus campos.
Mas ainda há um método mais seguro que esse que é utilizando o PDO que ternam as suas consultas no banco de dados mais segura do que a usada normalmente como no exemplo abaixo:
$sql = $pdo->prepare("SELECT * FROM usuario WHERE login = ? AND senha = ?");
$sql->bind_param(1, $_POST['nome'], PDO:ARAM_STR);
$sql->bind_param(2, $_POST['senha'], PDO:ARAM_STR);
$sql->execut();
Bom na primeira linha ele recebe vemos que é um String SQL normal...mas note que tem "?" no local onde seria uma variável para a consulta, essas "?" são mascaras e utilizando o bind_param para substituir a "?" pelo valor correto e efetuar a consulta
Note que na segunda e terceira linha tem um número o valor recuperado do formulário e outra função.
Bom no primeiro campo representa a ordem em sua sequencia das "?" o segundo parâmetro é a variável que recupera o valor do formulário e o terceiro parâmetro é o tipo da entrada, bom esse terceiro parâmetro não é obrigado mas eu prefiro colocar ^^
E por fim o execut que como o nome já diz executa o comando sql no banco de dados, o que torna a segunda opção mais segura que a primeira ou então crie uma função que identifique comandos SQL.
Bom pessoal é isso espero que gostem : )
Sugestões dicas melhorias do post comentem abaixo, se gostaram clickem em like se não gostaram também clicke no like e comente o que não te agradou só não vale xingar huahua
Créditos:
_kinght_ -> a pedido do mano abuzado : )
OBS: Tutorial / Dica feito exclusivamente para XPZone.net, caso alguém resolva publicar esse post em outro fórum coloque os créditos de quem criou o tópico no caso eu "_kinght_" e de qual fórum você copiou o post "xpzone.net".
Editado por um moderador: