Questa potrebbe essere una domanda stupida. O forse le mie capacità di hacking sono limitate (non le prendo affatto).Le query multilinea sql-injection sono sicure?
Ho una domanda che assomiglia a questo:
<?php
$query =<<<eot
SELECT table_x.field1,
table_x.field2,
table_y.*,
table_z.field4
FROM (
SELECT ...
) as table_y
LEFT JOIN table_x
ON table_x.field1 = table_y.field_x
LEFT JOIN table_z
ON table_z.field1 = table_y.field_z
WHERE table_x.field3 = '$something'
AND table_z.field4 = '1'
AND table_z.field5 = '2'
eot;
?>
Ho un sacco di altri test su $something
prima che venga utilizzato, come $something = explode(' ',$something);
(che poi il risultato in una stringa) nessuno di loro ha intenzione di evitare che iniezione ma rendono difficile per l'iniezione data ottenere come è per la query effettiva. Tuttavia, ci sono modi. Sappiamo tutti quanto sia facile sostituire uno spazio per qualcos'altro che è ancora valido ..
Quindi, non è davvero un problema rendere un potenziale punto di copertura SQL dannoso che $something
... Ma c'è qualche modo di commentare il resto della stringa di query originale se è multi-linea?
posso commentare AND table_z.field4 = '1'
utilizzando ;--
ma non posso commentare il seguente AND table_z.field5 = '2'
E 'possibile aprire un commento su più righe /*
senza chiudere o qualcosa che sembrava, e quindi consentire l'iniezione di ignorare il multi- query di riga?
Grazie Adam, hai ragione. È facile hackerare questa query su più righe. Vergognatevi per non aver visto questa opzione. Questo è comunque un esempio e la mia situazione è un po 'più complicata. Poiché non sono riuscito a spiegarmi, accetterò la tua risposta come corretta. – acm