Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Melhor maneira de proteger a consulta SQL em PHP


A consulta que você mostrou na pergunta não usa valores fornecidos pelo usuário, portanto, não há caso de injeção de SQL, mas em um caso geral:-

Em primeiro lugar, você deve validar todos a entrada do usuário (nomes de usuário, e-mails etc.) antes de usá-la em uma consulta. Por exemplo:- Se você permitiu apenas caracteres alfanuméricos em um nome de usuário, você deve verificar se a entrada é realmente alfanumérica ou não antes de prosseguir para formar uma consulta ao banco de dados e também verificar o tamanho de todas as entradas.

Depois disso, na minha opinião, Prepared Statements é a melhor escolha para evitar injeção de SQL.

Problema com mysql_real_escape_string():-

Como mysql_real_escape_string() escapa caracteres de acordo com o charset padrão, então é melhor que a função addlashes() e higieniza corretamente Injeções de SQL decorrentes do abuso de conjuntos de caracteres multibyte , mas em outro artigo aqui , é mostrado um cenário de solução alternativa que explica que a injeção ainda pode ser feita.

Solução:-

Portanto, a maneira correta e melhor de evitar a injeção de SQL é usar instruções preparadas. É uma técnica na qual as instruções SQL são pré-compiladas antes da inserção da entrada do usuário (parâmetros) e são tratadas como modelos SQL reutilizáveis. Portanto, ele separa a entrada do usuário do código SQL real e o analisador SQL nunca analisa a entrada do usuário.

Além da segurança, também otimiza a consulta SQL para velocidade. Isso ajuda nos casos em que você precisa executar a mesma consulta várias vezes com diferentes entradas do usuário.

Você pode consultar o manual do PHP para detalhes de implementação.