Sql tentativo di iniezione PHP 5.2.6
-
20-08-2019 - |
Domanda
Uso di PHP 5.2.6 in XAMPP:
Ho letto delle iniezioni di sql qui e l'ho provato con il seguente modulo di accesso:
<html><body>
<form method='post' action='login.php'>
<input type='text' name='user'/>
<input type='text' name='pass'/>
<input type='submit'/>
</form>
</body></html>
e codice php:
<?php
$user = $_POST['user'];
$pass = $_POST['pass'];
$query = "Select * from users where user='$user' AND pass='$pass'";
echo $query;
mysql_connect('localhost','root','');
mysql_select_db('test');
$res = mysql_query($query);
if($res) $row = mysql_fetch_assoc($res);
if($row) echo 'yes';
?>
Quello che ho scoperto è che la variabile $ pass aveva già evaso tutti i caratteri speciali.
Quindi, non è necessario utilizzare la stringa mysql _
real <=> escape <=> in PHP 5.2.6, allora?
Soluzione
È probabile che il tuo server PHP sia configurato per utilizzare Magic Quotes . Un'impostazione obsoleta in PHP che sfugge automaticamente a tutti i dati in arrivo in uno script PHP. È obsoleto e verrà rimosso in PHP 6. Ecco i motivi di Zend per rimuovere le virgolette.
È meglio non fare affidamento sulla "magia" che fa funzionare molte cose ma ne distrugge altre. Evitare esplicitamente l'input è più affidabile e ti consente di progettare un codice migliore. Ad esempio, non tutti gli input devono essere salvati allo stesso modo.
Altri suggerimenti
I valori possono essere sfuggiti a causa dell'attivazione di Magic Quotes nella configurazione del server. Le citazioni magiche sono considerate pessime, fondamentalmente per il motivo esatto che menzioni. Non è sicuro fare affidamento su una funzione che potrebbe essere o meno attiva per sfuggire automaticamente ai dati in arrivo. È molto meglio farlo da soli in fase di esecuzione.
Per ulteriori informazioni sulle citazioni di Magic, sul perché sono cattive e su come disabilitarle, dai un'occhiata ad alcune di queste domande / risposte SO:
No, non penso che tu sia qui. Indipendentemente dal fatto che php sfugga magicamente a caratteri speciali in questo esempio, l'interprete non eseguirà mysql specifico scappando sui propri argomenti di query.
Penso che sia estremamente probabile che ci sia una vulnerabilità in questo codice.