[DICA] Dicas de segurança - PHP

_kinght_

Honrado XPZ
25 de Dezembro de 2010
274
49
28
24
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::pARAM_STR);
$sql->bind_param(2, $_POST['senha'], PDO::pARAM_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:

xMoleque

Mulek
Legendário XPZ
25 de Maio de 2013
972
1,663
0
Segura meu LIKE.

Ótimas dicas ,vai ajuda bastante membro.

Você manja nos paranaue em
 

abuzado

aBuZaDo
Legendário XPZ
26 de Janeiro de 2011
2,748
581
133
26
ótimo tutorial mano , valeu por fazer ae pra nos ! vou seguir esse tutorial ae pra por no meu site , meu inject e diferente.
 

Nopalet

Novato XPZ
14 de Novembro de 2016
7
0
1
33
Quanto a mim, o mais fácil já pronto temas de criar um site. Agora eu encontrei uma grande variedade no site templatemonster.com/pt-br/temas-woocommerce/ e agora criou sem esforço normal, que funciona perfeitamente.
 
Última edição: