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)
Parametru | descrizzione |
---|---|
string | Ubligatoriu.Specifica a stringa per verificà. |
caratteri | Opcional.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!
📚 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!