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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top