Este artigo apresenta a diferença entre usar mysql_real_escape_string para classificar e processar dados enviados pelo usuário e usar três funções semelhantes: addlashes e mysql_escape_string. Os dados escapados podem ser inseridos diretamente no banco de dados.
É uma boa explicação para a diferença entre addlashes e mysql_real_escape_string Embora muitos codificadores PHP domésticos ainda dependam de addlashes para evitar a injeção de SQL (inclusive eu), ainda recomendo que todos reforcem as verificações para evitar a injeção de SQL em chinês. O problema com addlashes é que os hackers podem usar 0xbf27 para substituir aspas simples, enquanto addlashes apenas altera 0xbf27 para 0xbf5c27, que se torna um caractere multibyte válido, 0xbf5c ainda é considerado como uma aspa simples, portanto, addlashes não pode interceptar com sucesso.
Claro, addlashes não é inútil. Ele é usado para processar strings de byte único. Para caracteres de vários bytes, use mysql_real_escape_string.
Além disso, para o exemplo de get_magic_quotes_gpc no manual do PHP:
if (!get_magic_quotes_gpc()) {
$sobrenome = adicionalashes($_POST['sobrenome']);
} outro {
$sobrenome = $_POST['sobrenome'];
}
É melhor verificar $_POST['lastname'] quando magic_quotes_gpc já estiver aberto.
Vamos falar sobre a diferença entre as duas funções mysql_real_escape_string e mysql_escape_string:
mysql_real_escape_string só pode ser usado quando (PHP 4 >= 4.3.0, PHP 5). Caso contrário, você só poderá usar mysql_escape_string. A diferença entre os dois é:
mysql_real_escape_string leva em consideração o conjunto de caracteres atual da conexão, enquanto mysql_escape_string não.
Para resumir:
addlashes() é uma adição forçada;
mysql_real_escape_string() determinará o conjunto de caracteres, mas há requisitos para a versão do PHP
que não considera o conjunto de caracteres atual da conexão.