O uso mysql de addslashes ()

Possível Duplicado:
O que mysql_real_escape_string () faz que addslashes () não?

Se você está tentando evitar a injeção sql, a primeira coisa que você faria é usar mysql_real_escape_string. É possível injetar um database usando addslashes ()?

addslashes é o equivalente bruto de str_replace($str, "'", "\\'") . Você pode ignorá-lo trivialmente com qualquer número de seqüências unicode que avaliem para ' em mysql, mas parece completamente diferente de addslashes() .

Mysql_real_escape_String() por outro lado, usa a function interna de escape mysql real, que sabe exatamente o que procurar e corrigir para torná-lo “seguro” para mysql. O que funciona para o mysql pode não funcionar para outro database, pois cada um tem uma semântica e requisitos de escape ligeiramente diferentes, mas se você estiver trabalhando com o mysql, a “cadeia de escape real” é o caminho a seguir.

Isso é o que acontece quando você adiciona apenas barras oblongas em um idioma que entenda codificações de Unicode (ou misture codificações durante o envio da consulta): http://bugs.mysql.com/bug.php?id=22243

Basicamente, é mais seguro saber o que a base de dados espera em termos de codificação – dessa forma você não vai acabar escapando metade do personagem por acidente, ou deixando parte posterior de um personagem sem cache.

E ainda é possível se você adicionar dados não cotados a uma tabela, ou seja,

 SELECT * FROM tbl WHERE id = 10 

Aqui você quer certificar-se de que este id é exatamente um dígito

 $id = intval( $_GET[ 'id' ] ) ; $query = "SELECT * FROM tbl WHERE id = {$id}" ; $result = mysql_query( $query ) ; // ... bla-bla