Pergunta

Como seguro é esta declaração MySQL construído em PHP? Seria vulnerável a uma injeção SQL?

$sql = sprintf("INSERT IGNORE INTO my_table VALUES(%d, %d, 1, NOW())", 
                 mysql_escape_string($_SESSION['client']['id']), 
                 mysql_escape_string($_POST['id']));
Foi útil?

Solução

Sim, porque% d única resulta em um número não há nenhuma necessidade de escapar da cadeia. Usando aspas simples proporcionaria uma melhoria de velocidade também. Assim, uma forma segura e rápida é:

$sql = sprintf('INSERT IGNORE INTO my_table VALUES(%d, %d, 1, NOW())', $_SESSION['client']['id'], $_POST['id']);

Outras dicas

Não, não deve ser vulnerável.

Aqui está um artigo detalhado sobre a forma de garantir a sua SQL consultas em PHP .

http: //www.tech- evangelist.com/2007/11/05/preventing-sql-injection-attack/

Parece-me muito bem.

Na verdade, há alguma necessidade de usar mysql_escape_string neste caso, uma vez que sprintf ( "% d") só pode resultar em um número?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top