Anti Injection

O escreveu (ou copiou) isso no dia 31/07/2009 Voltar

O que seria Anti Injection?

Ou melhor o que seria uma SQL Injection?

Digamos assim, você tem um sistema de login, você tem o campo input text e o password pra senha tudo legal e lá na consulta você tem algo assim "SELECT * FROM usuarios WHERE login = '".$_POST['login']."' and senha = '".$_POST['senha']."'"


Parece tudo certo, né?
Mas agora imagine o cara vai lá e preenche os campos login com teste e senha com 1' OR '1=1
A nossa sql ficará assim SELECT * FROM usuarios WHERE login = 'teste' and senha = '1' OR '1=1'
Ou seja o cara se logara em seu sistema facil assim com sql injection.
Pra resolver isso basicamente um addslashes() resolveria algo tipo assim "SELECT * FROM usuarios WHERE login = '".addslashes($_POST['login'])."' and senha = '".addslashes($_POST['senha'])."'"
Pois o addslahes adicionaria automaticamente as barras invertidas em qualquer escape ai ficaria assim nossa sentença anterior SELECT * FROM usuarios WHERE login = 'teste' and senha = '1' OR '1=1'

E para irmos mais a fundo descobri essa função que remove qualquer chance de sql injection.

function jf_anti_injection($sql) {
    $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|*|--|\\)/"),"",$sql);
    $sql = trim($sql);
    $sql = strip_tags($sql);
    $sql = addslashes($sql);
    return $sql;
}

Explicando;
Na primeira linha, 'preg_replace(sql_regcase())', estamos removendo qualquer palavras que contenham sintaxe sql.
Na segunda linha, 'trim()', removemos todos os espaços vazios da string
Na terceira linha, 'strip_tags()', removemos qualquer código html e php da string
E na quarta linha, 'addslahes()', finalmente adicionamos as barras invertidas impossibilitando qualquer tentativa de SQL Injection

só que atualmente isso já foi depreciado então use

function jf_anti_injection($sql) {
    $sql = mysql_real_escape_string($sql);
    return $sql;
}

isso para quem usa o pacote JF, se não pode usar a função nativa do mysql direto

Comentar

Quase todos direitos reservados a Newsmade
Anti Injection | Newsmade