Direttorju tal-Artikoli
MySQLKif tipprevjeni l-injezzjoni sql? Prinċipju u prevenzjoni ta 'injezzjoni SQL
MySQL u injezzjoni SQL
Jekk tieħu d-dejta mdaħħla mill-utent permezz ta’ paġna tal-web u daħħalha f’adatabase MySQL, allura jista 'jkun hemm problemi ta' sigurtà ta 'injezzjoni SQL.
Dan il-kapitolu jintroduċik kif tipprevjeni l-injezzjoni SQL u tuża skripts biex tiffiltra karattri injettati fl-SQL.
L-hekk imsejħa injezzjoni SQL hija li tqarraq lis-server biex tesegwixxi kmandi SQL malizzjużi billi ddaħħal kmandi SQL fil-formola tal-web biex tissottometti jew ddaħħal is-sekwenza ta 'mistoqsijiet tal-isem tad-dominju jew it-talba tal-paġna.
Qatt m'għandna nafdaw l-input tal-utent, irridu nassumu li d-dejta tal-input tal-utent mhix sigura, u lkoll għandna bżonn niffiltraw id-dejta tal-input tal-utent.
Fl-eżempju li ġej, l-isem tal-utent imdaħħal għandu jkun taħlita ta’ ittri, numri, u linji ta’ taħt, u l-isem tal-utent għandu jkun twil bejn 8 u 20 karattru:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysqli_query($conn, "SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username 输入异常"; }
Ejja nagħtu ħarsa lejn is-sitwazzjoni SQL li sseħħ meta l-ebda karattru speċjali ma jiġi ffiltrat:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
Fid-dikjarazzjoni ta 'l-injezzjoni ta' hawn fuq, aħna ma ffiltrajniex il-varjabbli ta '$name.Id-dikjarazzjoni SQL li m'għandniex bżonn hija mdaħħla f'$name, li se tħassar id-dejta kollha fit-tabella ta' l-utenti.
mysqli_query() f'PHP mhux permess li jesegwixxi dikjarazzjonijiet SQL multipli, iżda SQLite u PostgreSQL jistgħu jesegwixxu dikjarazzjonijiet SQL multipli fl-istess ħin, għalhekk għandna bżonn nivverifikaw b'mod strett id-dejta ta 'dawn l-utenti.
Biex tipprevjeni l-injezzjoni SQL, irridu nagħtu attenzjoni għall-punti li ġejjin:
- 1. Qatt ma tafda l-input tal-utent.Iċċekkja l-input tal-utent, tista 'tuża espressjonijiet regolari, jew tillimita t-tul; ikkonverti kwotazzjonijiet singoli u doppju "-", eċċ.
- 2. Qatt tuża sql ta 'assemblaġġ dinamiku, tista' tuża sql parametrizzat jew tuża direttament proċeduri maħżuna għal mistoqsija u aċċess tad-dejta.
- 3. Qatt tuża konnessjonijiet ta 'database bi privileġġi ta' amministratur, uża konnessjonijiet ta 'database separati bi privileġġi limitati għal kull applikazzjoni.
- 4. Taħżinx informazzjoni kunfidenzjali direttament, tikkriptaġġ jew hash out passwords u informazzjoni sensittiva.
- 5. L-informazzjoni ta 'eċċezzjoni ta' l-applikazzjoni għandha tagħti l-inqas ħjiel possibbli, u huwa aħjar li tuża informazzjoni ta 'żball tad-dwana biex tkebbeb l-informazzjoni ta' żball oriġinali
- 6. Il-metodu ta 'skoperta ta' injezzjoni sql ġeneralment jadotta awżiljarju软件Jew il-pjattaforma tal-websajt biex tiskopri, is-softwer ġeneralment juża l-għodda ta 'skoperta ta' injezzjoni sql jsky, il-pjattaforma tal-websajt għandha l-għodda ta 'skoperta tal-pjattaforma tas-sigurtà tal-websajt Yisi. MDCSOFT SCAN et al.L-użu ta 'MDCSOFT-IPS jista' jiddefendi b'mod effettiv kontra injezzjoni SQL, attakki XSS, eċċ.
Prevenzjoni SQL Injezzjoni
Fil-lingwi tal-kitba bħal Perl u PHP tista' taħrab id-dejta mdaħħla mill-utent biex tipprevjeni l-injezzjoni SQL.
L-estensjoni MySQL għall-PHP tipprovdi l-funzjoni mysqli_real_escape_string() biex taħrab karattri ta’ input speċjali.
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysqli_real_escape_string($conn, $name); mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
Injezzjoni f'Dikjarazzjonijiet Simili
Meta tagħmel mistoqsija bħal, jekk l-utent idaħħal valuri b'"_" u "%", dan jiġri: l-utent oriġinarjament ried jistaqsi "abcd_", iżda r-riżultati tal-mistoqsija jinkludu "abcd_", "abcde" u "abcdf". " Eċċ.; il-problema sseħħ ukoll meta l-utent irid jagħmel mistoqsija "30%" (nota: tletin fil-mija).
Fi skript PHP nistgħu nużaw il-funzjoni addcslashes () biex nittrattaw is-sitwazzjoni ta 'hawn fuq, bħal fl-eżempju li ġej:
$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_"); // $sub == \%something\_ mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
Il-funzjoni addcslashes() iżżid backslash qabel il-karattru speċifikat.
Format tas-sintassi:
addcslashes(string,characters)
| 参数 | deskrizzjoni |
|---|---|
| sekwenza | Meħtieġ.Jispeċifika s-sekwenza li trid tiċċekkja. |
| karattri | Fakultattiv.Jispeċifika l-karattru jew il-firxa ta' karattri affettwati minn addcslashes(). |
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) maqsuma "Kif MySQL jipprevjeni l-injezzjoni sql? Prinċipju u prevenzjoni ta 'injezzjoni sql", se jgħinek.
Merħba biex taqsam il-link ta' dan l-artikolu:https://www.chenweiliang.com/cwl-500.html
Biex tiftaħ aktar tricks moħbija🔑, merħba tingħaqad mal-kanal Telegram tagħna!
Share u like jekk jogħġobkom! L-ishma u l-likes tiegħek huma l-motivazzjoni kontinwa tagħna!