SQL básico injeções?
-
06-07-2019 - |
Pergunta
Foi-me dito em um anterior pergunta que minha consulta está propenso a injeções SQL.
get_stats = mysql_query("SELECT *
FROM visitors
WHERE site='$_GET[site]'
AND date BETWEEN '$start_date' AND '$end_date' ");
Qual seria a maneira mais fácil de abordar este problema? E você tem algumas outras leituras sobre o assunto de injeções? (Algo que eu poderia perder no Google). Obrigado!
Solução
Use instruções preparadas .
Na maioria dos casos, instruções preparadas fazer o trabalho de combinar sua consulta com os seus parâmetros, de forma segura.
Outras dicas
$ _ GET [ 'local'] é um valor que vem direto da URL no navegador que significa que um usuário pode facilmente mudar este valor a qualquer coisa que eles querem, você deve verificar / higienizar esse valor, todos os valores realmente antes de enviá-lo para um banco de dados.
Algo como isso seria um começo, ainda poderia usar mais trabalho e há muitas maneiras de fazê-lo, eu iria criar uma função personalizada / classe para passar facilmente todas as variáveis ??através do site inteiro que pode encher simplesmente repetitivo como este
$site = mysql_real_escape_string($_GET['site']);
$start_date = mysql_real_escape_string($start_date);
$end_date = mysql_real_escape_string($end_date);
get_stats = mysql_query("SELECT * FROM visitors WHERE site='$site' AND date >= '$start_date' AND date <= '$end_date' ");
mysql_real_escape_string é o mais básico e forma mais fácil de segurança aqui.