Məqalələr kataloqu
MySQLSQL inyeksiyasının qarşısını necə almaq olar? SQL inyeksiya prinsipi və qarşısının alınması
MySQL və SQL inyeksiyası
İstifadəçinin daxil etdiyi məlumatları bir veb səhifədən götürsəniz və aMySQL verilənlər bazası, onda SQL injection təhlükəsizlik problemləri ola bilər.
Bu fəsil sizi SQL inyeksiyasının qarşısının alınması və SQL-də yeridilmiş simvolları süzgəcdən keçirmək üçün skriptlərdən istifadə etməklə tanış edəcək.
Sözdə SQL inyeksiyası, domen adının və ya səhifə sorğusunun sorğu sətirini təqdim etmək və ya daxil etmək üçün veb formaya SQL əmrləri daxil etməklə zərərli SQL əmrlərini yerinə yetirmək üçün serveri aldatmaqdır.
Biz heç vaxt istifadəçi girişinə etibar etməməliyik, hesab etməliyik ki, istifadəçi daxiletmə məlumatı təhlükəlidir və hamımız istifadəçi giriş məlumatlarını filtrləməliyik.
Aşağıdakı nümunədə daxil edilmiş istifadəçi adı hərflərin, rəqəmlərin və alt xəttlərin birləşməsindən ibarət olmalıdır və istifadəçi adı 8 ilə 20 simvol arasında olmalıdır:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysqli_query($conn, "SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username 输入异常"; }
Heç bir xüsusi simvol süzülmədikdə baş verən SQL vəziyyətinə nəzər salaq:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
Yuxarıdakı inyeksiya ifadəsində biz $name dəyişənini filtrləmədik.Bizə lazım olmayan SQL ifadəsi $name-ə daxil edilir və bu, istifadəçilər cədvəlindəki bütün məlumatları siləcək.
PHP-də mysqli_query() çoxlu SQL ifadələrini icra etməyə icazə verilmir, lakin SQLite və PostgreSQL eyni vaxtda birdən çox SQL ifadəsini icra edə bilər, ona görə də bu istifadəçilərin məlumatlarını ciddi şəkildə yoxlamalıyıq.
SQL inyeksiyasının qarşısını almaq üçün aşağıdakı məqamlara diqqət yetirməliyik:
- 1. Heç vaxt istifadəçi girişinə etibar etməyin.İstifadəçinin daxiletməsini yoxlayın, müntəzəm ifadələrdən istifadə edə və ya uzunluğu məhdudlaşdıra bilərsiniz; tək dırnaqları çevirin və ikiqat "-" və s.
- 2. Heç vaxt dinamik montaj sql-dən istifadə etməyin, siz parametrli sql-dən istifadə edə bilərsiniz və ya məlumat sorğusu və giriş üçün birbaşa saxlanılan prosedurlardan istifadə edə bilərsiniz.
- 3. Heç vaxt administrator imtiyazları ilə verilənlər bazası bağlantılarından istifadə etməyin, hər bir proqram üçün məhdud imtiyazlara malik ayrıca verilənlər bazası bağlantılarından istifadə edin.
- 4. Məxfi məlumatları birbaşa saxlamayın, parolları və məxfi məlumatları şifrələməyin və ya hash etməyin.
- 5. Tətbiqin istisna məlumatı mümkün qədər az ipucu verməlidir və orijinal səhv məlumatını bağlamaq üçün xüsusi səhv məlumatından istifadə etmək daha yaxşıdır.
- 6. SQL inyeksiyasının aşkarlama metodu ümumiyyətlə köməkçini qəbul edirProqram təminatıVə ya aşkar etmək üçün veb sayt platforması, proqram ümumiyyətlə sql injection aşkarlama vasitəsi jsky istifadə edir, veb sayt platformasında Yisi veb sayt təhlükəsizlik platforması aşkarlama aləti var. MDCSOFT SCAN və başqaları.MDCSOFT-IPS-dən istifadə SQL injection, XSS hücumları və s. qarşı effektiv şəkildə müdafiə edə bilər.
SQL inyeksiyasının qarşısının alınması
Perl və PHP kimi skript dillərində SQL inyeksiyasının qarşısını almaq üçün istifadəçinin daxil etdiyi məlumatlardan qaça bilərsiniz.
PHP üçün MySQL genişləndirilməsi xüsusi giriş simvollarından qaçmaq üçün mysqli_real_escape_string() funksiyasını təmin edir.
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysqli_real_escape_string($conn, $name); mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
Bəyənmə ifadələrində inyeksiya
İstifadəçi "_" və "%" ilə dəyərlər daxil edərsə, bu baş verəcəkdir: istifadəçi əvvəlcə "abcd_" sorğusu etmək istəyirdi, lakin sorğunun nəticələrinə "abcd_", "abcde" və "abcdf" daxildir. " Və s.; problem istifadəçi "30%" sorğusu vermək istədikdə də yaranır (qeyd: otuz faiz).
PHP skriptində yuxarıdakı vəziyyəti idarə etmək üçün addcslashes() funksiyasından istifadə edə bilərik, aşağıdakı nümunədə olduğu kimi:
$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_"); // $sub == \%something\_ mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
addcslashes() funksiyası göstərilən simvoldan əvvəl tərs xətt əlavə edir.
Sintaksis formatı:
addcslashes(string,characters)
| 参数 | təsviri |
|---|---|
| sim | Tələb olunur.Yoxlanacaq sətri təyin edir. |
| simvol | Könüllü.addcslashes() funksiyasının təsir etdiyi xarakter və ya simvol diapazonunu təyin edir. |
Hope Chen Weiliang Blogu ( https://www.chenweiliang.com/ ) paylaşdı "MySQL sql inyeksiyasının qarşısını necə alır? sql injection prinsipi və qarşısının alınması", bu sizə kömək edəcək.
Bu məqalənin linkini paylaşmağa xoş gəlmisiniz:https://www.chenweiliang.com/cwl-500.html
Daha çox gizli hiylələri açmaq üçün🔑 Telegram kanalımıza qoşulmağa xoş gəlmisiniz!
Bəyəndinizsə paylaşın və bəyənin! Paylaşımlarınız və bəyənmələriniz bizim davamlı motivasiyamızdır!