PHP -də SQL enjeksiyonunu necə qarşısını almaq olar (şəkillərlə)

Mündəricat:

PHP -də SQL enjeksiyonunu necə qarşısını almaq olar (şəkillərlə)
PHP -də SQL enjeksiyonunu necə qarşısını almaq olar (şəkillərlə)

Video: PHP -də SQL enjeksiyonunu necə qarşısını almaq olar (şəkillərlə)

Video: PHP -də SQL enjeksiyonunu necə qarşısını almaq olar (şəkillərlə)
Video: Ən çətin məntiq testi.😉 Kim tapsa 1-ci yer. Yalnız 1 nəfər.❗❗ 2024, Bilər
Anonim

Bu wikiHow, PHP -də Hazırlanmış Bəyanatları istifadə edərək SQL enjeksiyonunun qarşısını almağı öyrədir. SQL enjeksiyonu, bu gün veb tətbiqlərində ən çox yayılmış zəifliklərdən biridir. Hazırlanmış ifadələr bağlı parametrlərdən istifadə edir və dəyişənləri SQL sətirləri ilə birləşdirmir, bu da təcavüzkarın SQL bəyanatını dəyişdirməsini qeyri -mümkün edir.

Hazırlanmış ifadələr, dəyişənləri tərtib edilmiş SQL ifadəsi ilə birləşdirir, beləliklə SQL və dəyişənlər ayrıca göndərilir. Dəyişənlər daha sonra SQL ifadəsinin bir hissəsi deyil, sadəcə sətirlər kimi şərh olunur. Aşağıdakı addımlardakı metodlardan istifadə edərək, mysql_real_escape_string () kimi başqa SQL enjeksiyon filtrləmə üsullarından istifadə etməyinizə ehtiyac olmayacaq.

Addımlar

2 -dən 1 -ci hissə: SQL Enjeksiyonunu Anlamaq

Addım 1. SQL Enjeksiyonu, SQL verilənlər bazasından istifadə edən tətbiqlərdə bir növ zəiflikdir

Zəiflik, bir istifadəçi girişi SQL bəyanatında istifadə edildikdə yaranır:

$ adı = $ _GET ['istifadəçi adı']; $ query = "Şifrəni seçin FROM tbl_user WHERE name = '$ name'";

Addım 2. İstifadəçinin URL dəyişən istifadəçi adına daxil etdiyi dəyər $ name dəyişəninə veriləcək

Daha sonra istifadəçinin SQL ifadəsini redaktə etməsini mümkün edən birbaşa SQL bəyanatına yerləşdirilir.

$ name = "admin 'OR 1 = 1 -"; $ query = "Şifrəni seçin FROM tbl_user WHERE name = '$ name'";

Addım 3. Daha sonra SQL verilənlər bazası SQL ifadəsini aşağıdakı kimi alacaq:

Tbl_users -dən parol seçin WHERE name = 'admin' OR 1 = 1 - '

  • Bu etibarlı SQL -dir, lakin istifadəçi üçün bir parol qaytarmaq əvəzinə bəyanat cədvəldəki bütün şifrələri qaytaracaq tbl_user. Bu veb tətbiqlərinizdə istədiyiniz bir şey deyil.

    2 -ci hissə 2: Hazırlanmış Hesabatlar yaratmaq üçün mySQLi istifadə edin

    2542820 1
    2542820 1

    Addım 1. mySQLi SELECT Sorğusunu yaradın

    MySQLi Hazırlanmış İfadələrdən istifadə edərək cədvəldən məlumat seçmək üçün aşağıdakı kodu istifadə edin.

    $ adı = $ _GET ['istifadəçi adı']; if ($ stmt = $ mysqli-> hazırlamaq ("tbl_users WHERE name =?" dən parol seçin)) {// Dəyişənləri parametrə simli olaraq bağlayın. $ stmt-> bind_param ("s", $ adı); // Bəyanatı icra edin. $ stmt-> icra et (); // Dəyişənləri sorğudan əldə edin. $ stmt-> bind_result ($ pass); // Məlumatları əldə edin. $ stmt-> fetch (); // Məlumatları göstərin. printf (" %s istifadəçisi üçün parol %s / n", $ adı, $ pass); // Hazırlanmış ifadəni bağlayın. $ stmt-> yaxın (); }

    Qeyd: $ mysqli dəyişəni mySQLi Bağlantı Obyektidir

    2542820 2
    2542820 2

    Addım 2. mySQLi INSERT Sorğusunu yaradın

    MySQLi Hazırlanmış Hesabatları istifadə edərək məlumatları bir cədvələ daxil etmək üçün aşağıdakı kodu istifadə edin.

    $ adı = $ _GET ['istifadəçi adı']; $ parol = $ _GET ['parol']; if ($ stmt = $ mysqli-> Prepar ("INSERT INTO tbl_users (name, password) VALUES (?,?)")) {// Dəyişənləri parametrə strings kimi bağlayın. $ stmt-> bind_param ("ss", $ adı, $ parol); // Bəyanatı icra edin. $ stmt-> icra et (); // Hazırlanmış ifadəni bağlayın. $ stmt-> yaxın (); }

    Qeyd: dəyişən $ mysqli mySQLi Bağlantı Obyektidir

    2542820 3
    2542820 3

    Addım 3. mySQLi UPDATE Sorğusunu yaradın

    MySQLi Hazırlanmış Hesabatları istifadə edərək cədvəldəki məlumatları YENİLƏNMƏK üçün aşağıdakı kodu istifadə edin.

    $ adı = $ _GET ['istifadəçi adı']; $ parol = $ _GET ['parol']; if ($ stmt = $ mysqli-> hazırla ("UPDATE tbl_users SET password =? WHERE name =?")) {// Dəyişənləri parametrə strings kimi bağlayın. $ stmt-> bind_param ("ss", $ parol, $ adı); // Bəyanatı icra edin. $ stmt-> icra et (); // Hazırlanmış ifadəni bağlayın. $ stmt-> yaxın (); }

    Qeyd: $ mysqli dəyişəni mySQLi Bağlantı Obyektidir

    2542820 4
    2542820 4

    Addım 4. mySQLi DELETE Sorğusunu yaradın

    Aşağıdakı skript, mySQLi Hazırlanmış Bəyanatları istifadə edərək cədvəldən məlumatların necə silinəcəyidir.

    $ adı = $ _GET ['istifadəçi adı']; $ parol = $ _GET ['parol']; if ($ stmt = $ mysqli-> prepar ("tbl_users WHERE name =?" DELETE)) {// Dəyişəni parametrə bir simli kimi bağlayın. $ stmt-> bind_param ("s", $ adı); // Bəyanatı icra edin. $ stmt-> icra et (); // Hazırlanmış ifadəni bağlayın. $ stmt-> yaxın (); }

Tövsiyə: