Latest web development tutorials

iniezione MySQL e SQL

Se si ottiene i dati inseriti dall'utente tramite il web e inserirlo in un database MySQL, allora è possibile i problemi di sicurezza di iniezione SQL.

In questa sezione vi dirà come prevenire SQL injection, e per filtrare i caratteri di iniezione SQL in uno script.

La cosiddetta SQL injection, è attraverso il comando SQL nel modulo Web presentare o immettere il nome di dominio o richiesta di pagina stringa di query, e in ultima analisi ingannare server per eseguire i comandi SQL dannosi.

Abbiamo l'input dell'utente mai fiducia, dobbiamo identificare i dati inseriti dall'utente sono insicuri, tutti abbiamo bisogno per il processo di filtraggio dei dati di input dell'utente.

L'esempio che segue, il nome utente immesso deve essere una combinazione di lettere, numeri e caratteri di sottolineatura, e la lunghezza del nome utente è compresa tra 8-20 caratteri:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysql_query("SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Diamo un'occhiata alla situazione in cui non vi è alcun filtro SQL appaiono caratteri speciali:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Sopra dichiarazione di iniezione, non abbiamo filtrare il nome variabile $, $ name non abbiamo bisogno di inserire l'istruzione SQL cancellerà tutti i dati degli utenti della tabella.

mysql_query in PHP () non è consentito di eseguire più istruzioni SQL, ma in SQLite e PostgreSQL in grado di eseguire più istruzioni SQL contemporaneamente, così gli utenti di questi dati abbiamo bisogno di verifica rigorosa.

Prevenire SQL injection, dobbiamo prestare attenzione ai seguenti punti:

  • 1. l'input dell'utente Mai fiducia. Verifica di input dell'utente, è possibile utilizzare le espressioni regolari, o limitare la lunghezza; virgolette singole e doppie virgolette "-" nella conversione.
  • 2. Mai utilizzare SQL assemblaggio dinamico, è possibile utilizzare i parametri di utilizzo diretto di SQL o stored procedure per l'accesso query di dati.
  • 3. Non utilizzare mai amministratore privilegi di connessione al database, utilizzare le autorizzazioni individuali limitate per ogni connessione al database dell'applicazione.
  • 4. Non conservare informazioni riservate direttamente, la crittografia o hash password e le informazioni sensibili.
  • 5. Le informazioni di eccezione di applicazione dovrebbe essere dato il minor numero di richieste, è meglio usare un messaggio di errore personalizzato Messaggio di errore confezione originale
  • Rilevamento 6.sql sito di iniezione in piattaforma generale o di supporto software per rilevare, il software comunemente usato SQL strumenti di rilevazione iniezione jsky, internet sito web sito miliardi di pensiero c'è strumenti di rilevamento piattaforma di sicurezza. MDCSOFT SCAN piace. Utilizzando MDCSOFT-IPS può essere efficace iniezione difesa SQL, attacchi XSS.

iniezione Prevenire SQL

In linguaggi di scripting come Perl e PHP si può sfuggire i dati inseriti dall'utente al fine di prevenire SQL injection.

estensione PHP MySQL fornisce la funzione mysql_real_escape_string () per sfuggire caratteri di input speciali.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Come iniezione dichiarazione

come la query, se l'utente inserisce un valore "_" e "%", allora questo accade: L'utente è stato solo cercando query "abcd_", i risultati delle query là "abcd _", "ABCDE", "abcdf" ecc; all'utente di interrogare il "30%" (Nota: il trenta per cento) avranno problemi.

Nello script PHP, possiamo usare addcslashes () per gestire il caso di cui sopra, i seguenti esempi:

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes () prima specificati con un backslash.

sintassi:

addcslashes(string,characters)
parametri descrizione
stringa Richiesto. Per controllare la stringa specificata.
personaggi Opzionale. Prescritto dal addcslashes () influenzare caratteri o intervalli di caratteri.

È possibile visualizzare l'applicazione specifica: le addcslashes PHP () funzione