Ataques de injeção de PHP e SQL [2]
Citações mágicas
Como mencionado acima, a injeção de SQL envia principalmente dados inseguros ao banco de dados para atingir o objetivo do ataque. Para evitar ataques de injeção de SQL, o PHP vem com uma função que pode processar a string de entrada e realizar o processamento preliminar de segurança na entrada de nível inferior, ou seja, Magic Quotes. (php.ini magic_quotes_gpc). se magic_quotes_gpc
Se a opção estiver habilitada, aspas simples, aspas duplas e outros caracteres na string de entrada serão automaticamente precedidos por uma barra invertida .
Mas Magic Quotes não é uma solução muito universal, não bloqueia todos os caracteres potencialmente perigosos e em muitos servidores Magic Quotes não está habilitado. Portanto, também precisamos usar vários outros métodos para evitar a injeção de SQL.
Muitos bancos de dados fornecem essa funcionalidade de processamento de dados de entrada nativamente. Por exemplo, a função de operação MySQL do PHP possui uma função chamada mysql_real_escape_string(), que pode escapar de caracteres especiais e caracteres que podem causar erros de operação do banco de dados.
consulte:
http://cn2.php.net/mysql_real_escape_string
Se você estiver interessado, pode ler os comentários abaixo:)
Veja este código:
//Se a função Magic Quotes estiver habilitada
if (get_magic_quotes_gpc()) {
$nome = stripslashes($nome);
}outro{
$nome = mysql_real_escape_string($nome);
}
mysql_query("SELECT * FROM users WHERE name='{$name}'");
Observe que antes de usarmos as funções fornecidas pelo banco de dados, devemos determinar se Magic Quotes está ativado, assim como no exemplo acima, caso contrário, será repetido duas vezes. O processamento dará errado. Se o MQ estiver habilitado, precisamos remover o adicionado para obter os dados reais.
Além de pré-processar os dados em formato de string acima, ao armazenar dados binários no banco de dados, você também deve prestar atenção ao pré-processamento. Caso contrário, os dados podem entrar em conflito com o formato de armazenamento do próprio banco de dados, causando falha no banco de dados, perda de registros de dados ou até mesmo perda de todo o banco de dados. Alguns bancos de dados, como PostgreSQL, fornecem uma função pg_escape_bytea() especialmente usada para codificar dados binários, que pode codificar os dados de forma semelhante ao Base64.
como:
// para uso de dados de texto simples:
pg_escape_string($regular_strings);
// para uso de dados binários:
pg_escape_bytea($binary_data);
Em outro caso, também precisamos usar tal mecanismo. Ou seja, idiomas multibyte, como chinês, japonês, etc., que não são suportados pelo próprio sistema de banco de dados. Alguns deles possuem intervalos ASCII que se sobrepõem aos intervalos de dados binários.
No entanto, a codificação dos dados pode causar falhas em consultas como LIKE abc%.