Criando uma classe comum para seu projeto!
Thursday, November 13, 2008 11:33:16 PM
Quero começar este post hoje para dizer que todos os post que estão neste blog são de minha autoria, fiz da minha cabeça e não copiei de nenhum lugar, porém o conteúdo aqui inserido está a disposição para qualquer fim! [/OFF TOPIC]
Começando:
Muitas vezes pessoas me perguntam como fazer tal coisa e eu sempre respondo com maior prazer fazendo funções na necessidade da pessoa. Porém hoje farei diferente, em uma série de posts estarei desenvolvendo uma classe que chamarei de COMMONS. Nela teremos vários métodos interessantes e úteis para um bom desenvolvimento de sistemas orientados a objeto.
Primeiro método - Evitar SQL injection: Explicação: Bom o injection em SQL é um dos maiores problemas na programação em geral. Se a instrução não for bem desenvolvida pode abrir vulnerabilidades na sua aplicação. Um exemplo básico:
<?php
mysql_connect('localhost','root','');
mysql_select_db('timeshift');
$usuario = 'marcus';
$sql = "Select * from tm_usuario where login = '$usuario'";
echo $sql.'<hr>' ;
$query = mysql_query($sql) or exit(mysql_error());
while($dados = mysql_fetch_array($query)){
echo "Achou : ".$dados['login'].'<br>';
}
?>
O código acima retornará:
Select * from tm_usuario where login = 'marcus'
Achou : marcus Vulnerabilidade: trocar a variavel $usuario = 'marcus' por $usuario = "1'or '1'='1"; Pronto sua query ficará assim: Select * from tm_usuario where login = '1'or '1'='1' e com isso o código te retornará: Select * from tm_usuario where login = '1'or '1'='1'
Achou : admin Achou : marcus Achou : renato Com isso você terá acesso ao site. Mas isso não é o pior o invasor pode fazer isso: $usuario = "1''; drop table tm_usuario"; nada mais nada menos do que APAGOU sua tabela. Como evitar: começaremos a nossa classe commons com o método que chamaremos de prepare, que simplesmente receberá como parâmetro a instrução bruta e tratará o injection evitando ataques ao seu sistema. Passo 1 da nossa classe commons - evitar SQL injection
<?php
class commons{
function prepare($sql){
return mysql_real_escape_string($sql);
}
}
?>
Como utilizar:
<?php
include('commons.class.php');
mysql_connect('localhost','root','');
mysql_select_db('timeshift');
$commons = new commons;
$usuario = "1'or '1'='1";
$usuario = $commons->prepare($usuario);
$sql = "Select * from tm_usuario where login = '".$usuario."'";
echo $sql.'<br>';
$query = mysql_query($sql) or exit(mysql_error());
while($dados = mysql_fetch_array($query)){
echo "Achou : ".$dados['login'].'<br>';
}
?>
Fazendo isso sua query retornará o seguinte:
Select * from tm_usuario where login = '1\'or \'1\'=\'1' não executando o SQL injection.
Espero que esta dica tenha sido útil, no próximo post faremos um outro método da nossa classe commons que será o calculo entre duas datas.
Comentem quando possível











