Cumu MySQL impedisce l'iniezione di SQL? Principiu di iniezione SQL è prevenzione

MySQLCumu impedisce l'iniezione di sql? Principiu di iniezione SQL è prevenzione

MySQL è iniezione SQL

Se pigliate i dati inseriti da l'utilizatore à traversu una pagina web è inserisci in abasa di dati MySQL, allura ci pò esse prublemi di sicurità di iniezione SQL.

Stu capitulu introduverà cumu impedisce l'iniezione SQL è filtrà i caratteri injected in SQL attraversu scripts.

L'injezione chjamata SQL hè di ingannà u servitore per eseguisce cumandamenti SQL maliziusi inserisce cumandamenti SQL in a forma web per mandà o inserisce a stringa di dumanda di u nome di duminiu o dumanda di pagina.

Ùn avemu mai fiducia in l'input di l'utilizatori, duvemu assume chì i dati di input di l'utilizatori ùn sò micca sicuri, è tutti avemu bisognu di filtrà i dati di input di l'utilizatori.

In l'esempiu seguente, u nome d'utilizatore inseritu deve esse una cumminazione di lettere, numeri è underscores, è u nome d'utilizatore deve esse trà 8 è 20 caratteri:

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

Fighjemu a situazione SQL chì si trova quandu i caratteri speciali ùn sò micca filtrati:

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

In a dichjarazione di iniezione di sopra, ùn avemu micca filtratu a variàbile di $name, è a dichjarazione SQL chì ùn avemu micca bisognu hè inserita in $name, chì sguassà tutte e dati in a tabella di l'utilizatori.

mysqli_query() in PHP ùn hè micca permessu di eseguisce parechje dichjarazioni SQL, ma in SQLite è PostgreSQL, parechje dichjarazioni SQL ponu esse eseguite à u stessu tempu, cusì avemu bisognu di verificà strettamente i dati di questi utilizatori.

Per prevene l'iniezione SQL, avemu bisognu di attentu à i seguenti punti:

  • 1. Ùn mai fiducia in input utilizatori.Verificate l'input di l'utilizatore, pudete aduprà espressioni regulare, o limità a lunghezza; cunvertisce virgolette singuli è doppia "-", etc.
  • 2. Ùn mai aduprate sql di assemblea dinamica, pudete aduprà sql parametrizzatu o direttamente i prucessi almacenati per a quistione di dati è accessu.
  • 3. Ùn aduprate mai cunnessione di basa di dati cù privilegi di amministratore, utilizate cunnessione di basa di dati separati cù privilegi limitati per ogni applicazione.
  • 4. Ùn almacenà micca infurmazione cunfidenziale direttamente, criptate o hash out password è infurmazione sensitiva.
  • 5. L'infurmazioni di l'eccezzioni di l'appiecazione duveria dà quant'è pocu suggerimenti pussibule, è hè megliu utilizà l'infurmazioni d'errore persunalizati per imbulighjà l'infurmazioni d'errore originali.
  • 6. U metudu di deteczione di sql injection generalmente adopta l'auxiliariuSoftwareO a piattaforma di u situ web per detect, u software generalmente usa l'utile di rilevazione di iniezione sql jsky, è a piattaforma di u situ web hà u strumentu di rilevazione di a piattaforma di sicurezza di u situ Yisi. MDCSOFT SCAN et al.Utilizà MDCSOFT-IPS pò difende in modu efficace contru l'iniezione SQL, attacchi XSS, etc.

Impedisce l'injection SQL

In lingue di scrittura cum'è Perl è PHP pudete scappà i dati inseriti da l'utilizatore per impedisce l'iniezione SQL.

L'estensione MySQL per PHP furnisce a funzione mysqli_real_escape_string() per scappà caratteri di input speciale.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Injection in Like Statements

Quandu si dumanda cum'è, se l'utilizatore inserisce valori cù "_" è "%", questu succederà: l'utilizatore originalmente vulia interrogà "abcd_", ma i risultati di a quistione includenu "abcd_", "abcde" è "abcdf". " Etc.; u prublema si trova ancu quandu l'utilizatore vole dumandà "30%" (nota: trenta per centu).

In u script PHP pudemu usà a funzione addcslashes () per trattà a situazione sopra, cum'è in l'esempiu seguente:

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

A funzione addcslashes () aghjunghje un backslash prima di u caratteru specificatu.

Formatu di sintassi:

addcslashes(string,characters)
Parametrudescrizzione
stringUbligatoriu.Specifica a stringa per verificà.
caratteriOpcional.Specifica u caratteru o a gamma di caratteri affettati da addcslashes ().

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) hà spartutu "Cumu MySQL impedisce l'iniezione di SQL? sql injection principe è prevenzione ", vi aiuterà.

Benvenuti à sparte u ligame di stu articulu:https://www.chenweiliang.com/cwl-500.html

Benvenuti à u canali Telegram di u blog di Chen Weiliang per avè l'ultime aghjurnamenti!

🔔 Siate u primu à uttene a preziosa "Guida d'Utilisazione di l'Utili di l'AI di Marketing di cuntenutu ChatGPT" in u cartulare di u canali! 🌟
📚 Questa guida cuntene un valore enormu, 🌟Questa hè una rara opportunità, ùn mancate micca! ⏰⌛💨
Condividi è mi piace se ti piace!
A vostra spartera è Mi piace sò a nostra motivazione cuntinua!

 

发表 评论

U vostru indirizzu email ùn serà micca publicatu. I campi richiesti sò aduprati * Etichetta

scorri in cima