PHP -da SQL in'ektsiyasini qanday oldini olish mumkin (rasmlar bilan)

Mundarija:

PHP -da SQL in'ektsiyasini qanday oldini olish mumkin (rasmlar bilan)
PHP -da SQL in'ektsiyasini qanday oldini olish mumkin (rasmlar bilan)

Video: PHP -da SQL in'ektsiyasini qanday oldini olish mumkin (rasmlar bilan)

Video: PHP -da SQL in'ektsiyasini qanday oldini olish mumkin (rasmlar bilan)
Video: - TELEFONDA REKLAMALARNI O'CHIRISH | Телефонда рекламаларни бутунлай учириш 2021 2024, May
Anonim

Bu wikiHow sizga PHP -da tayyorlangan bayonotlar yordamida SQL in'ektsiyasini oldini olishni o'rgatadi. SQL in'ektsiyasi bugungi kunda veb -ilovalarning eng keng tarqalgan zaifliklaridan biridir. Tayyorlangan bayonotlar majburiy parametrlardan foydalanadi va o'zgaruvchilarni SQL satrlari bilan birlashtirmaydi, bu esa tajovuzkorga SQL bayonotini o'zgartirish imkoniyatini bermaydi.

Tayyorlangan bayonotlar o'zgaruvchini SQL tuzilishi bilan birlashtiradi, shuning uchun SQL va o'zgaruvchilar alohida yuboriladi. Keyin o'zgaruvchilar SQL satrining bir qismi emas, oddiy satrlar sifatida talqin qilinadi. Quyidagi qadamlardagi usullardan foydalangan holda, boshqa SQL in'ektsion filtrlash usullarini ishlatishning hojati yo'q, masalan mysql_real_escape_string ().

Qadamlar

2 -qismning 1 -qismi: SQL in'ektsiyasini tushunish

Qadam 1. SQL in'ektsiyasi - bu SQL ma'lumotlar bazasidan foydalanadigan ilovalardagi zaiflik turi

Xavfsizlik SQL bayonotida foydalanuvchi kiritganidan keyin paydo bo'ladi:

$ nomi = $ _GET ['foydalanuvchi nomi']; $ query = "Parolni FROM dan tanlang tbl_user WHERE name = '$ name'";

Qadam 2. Foydalanuvchining URL o'zgaruvchisiga foydalanuvchi qiymati kiritiladi $ name o'zgaruvchisiga

Keyin u to'g'ridan -to'g'ri SQL bayonotiga joylashtiriladi, bu esa foydalanuvchiga SQL bayonotini tahrir qilish imkonini beradi.

$ name = "admin 'OR 1 = 1 -"; $ query = "Parolni FROM dan tanlang tbl_user WHERE name = '$ name'";

Qadam 3. SQL ma'lumotlar bazasi SQL bayonotini quyidagicha oladi:

Parolni tanlang tbl_users WHERE name = 'admin' OR 1 = 1 - '

  • Bu haqiqiy SQL, lekin foydalanuvchi uchun bitta parolni qaytarish o'rniga, tbl_user jadvalidagi barcha parollar qaytariladi. Bu sizning veb -ilovalaringizda xohlagan narsangiz emas.

2dan 2 qism: Tayyorlangan bayonotlar yaratish uchun mySQLi -dan foydalanish

2542820 1
2542820 1

Qadam 1. mySQLi SELECT so'rovini yarating

MySQLi tayyorlangan bayonotlar yordamida jadval ma'lumotlarini tanlash uchun quyidagi koddan foydalaning.

$ nomi = $ _GET ['foydalanuvchi nomi']; if ($ stmt = $ mysqli-> tayyorgarlik $ stmt-> bind_param ("s", $ nomi); // Fikrni bajaring. $ stmt-> execute (); // O'zgaruvchilarni so'rovdan oling. $ stmt-> bind_result ($ pass); // Ma'lumotlarni oling. $ stmt-> olish (); // Ma'lumotlarni ko'rsatish. printf (" %s foydalanuvchisi uchun parol - %s / n", $ nomi, $ pass); // Tayyorlangan bayonotni yoping. $ stmt-> yopish (); }

Eslatma: $ mysqli o'zgaruvchisi mySQLi ulanish ob'ekti

2542820 2
2542820 2

2 -qadam. MySQLi INSERT so'rovini yarating

MySQLi Tayyorlangan bayonotlar yordamida jadvalga ma'lumotlarni kiritish uchun quyidagi koddan foydalaning.

$ nomi = $ _GET ['foydalanuvchi nomi']; $ parol = $ _GET ['parol']; if ($ stmt = $ mysqli-> tayyorgarlik ("INSERT INTO tbl_users (ism, parol) VALUES (?,?)"))) // parametrlarni parametr sifatida bog'lang. $ stmt-> bind_param ("ss", $ nomi, $ parol); // Fikrni bajaring. $ stmt-> execute (); // Tayyorlangan bayonotni yoping. $ stmt-> yopish (); }

Eslatma: $ mysqli o'zgaruvchisi mySQLi ulanish ob'ekti

2542820 3
2542820 3

3 -qadam. MySQLi UPDATE so'rovini yarating

MySQLi tayyorlangan bayonotlar yordamida jadvaldagi ma'lumotlarni yangilash uchun quyidagi koddan foydalaning.

$ nomi = $ _GET ['foydalanuvchi nomi']; $ parol = $ _GET ['parol']; if ($ stmt = $ mysqli-> tayyorgarlik ("UPDATE tbl_users SET password =? WHERE name =?")) {// O'zgaruvchilarni parametrlar qatoriga bog'lang. $ stmt-> bind_param ("ss", $ parol, $ nomi); // Fikrni bajaring. $ stmt-> execute (); // Tayyorlangan bayonotni yoping. $ stmt-> yopish (); }

Eslatma: $ mysqli o'zgaruvchisi mySQLi ulanish ob'ekti

2542820 4
2542820 4

Qadam 4. mySQLi DELETE so'rovini yarating

Quyidagi skriptda mySQLi tayyorlangan bayonotlar yordamida jadvaldagi ma'lumotlarni qanday o'chirish kerakligi ko'rsatilgan.

$ nomi = $ _GET ['foydalanuvchi nomi']; $ parol = $ _GET ['parol']; if ($ stmt = $ mysqli-> tayyorlash ("tbl_users WHERE nomidan o'chirish =?")) {// O'zgaruvchini parametrga qator sifatida bog'lang. $ stmt-> bind_param ("s", $ nomi); // Fikrni bajaring. $ stmt-> execute (); // Tayyorlangan bayonotni yoping. $ stmt-> yopish (); }

Tavsiya: