PHP дээр SQL тарихаас хэрхэн урьдчилан сэргийлэх вэ (зурагтай)

Агуулгын хүснэгт:

PHP дээр SQL тарихаас хэрхэн урьдчилан сэргийлэх вэ (зурагтай)
PHP дээр SQL тарихаас хэрхэн урьдчилан сэргийлэх вэ (зурагтай)

Видео: PHP дээр SQL тарихаас хэрхэн урьдчилан сэргийлэх вэ (зурагтай)

Видео: PHP дээр SQL тарихаас хэрхэн урьдчилан сэргийлэх вэ (зурагтай)
Видео: iPhone-ы зураг нуух 2 арга (3 минутанд сурцгаая!) | How to hide iDevice Photos 2024, May
Anonim

Энэхүү wikiHow нь PHP дээр бэлтгэсэн мэдэгдэл ашиглан SQL тарилга хийхээс хэрхэн урьдчилан сэргийлэх талаар танд заадаг. SQL тарилга нь өнөө үед вэб програмуудын хамгийн түгээмэл эмзэг байдлын нэг юм. Бэлтгэсэн мэдэгдэл нь хязгаарлагдмал параметрүүдийг ашигладаг бөгөөд хувьсагчдыг SQL мөрүүдтэй нэгтгэдэггүй тул халдагч этгээд SQL хэллэгийг өөрчлөх боломжгүй болгодог.

Бэлтгэсэн мэдэгдэл нь хувьсагчийг нэгтгэсэн SQL мэдэгдэлтэй нэгтгэдэг бөгөөд ингэснээр SQL болон хувьсагчдыг тусад нь илгээдэг. Дараа нь хувьсагчдыг SQL хэллэгийн нэг хэсэг биш энгийн мөр гэж тайлбарладаг. Доорх алхамуудын аргуудыг ашигласнаар mysql_real_escape_string () гэх мэт SQL тарилгын шүүлтүүрийн бусад аргыг ашиглах шаардлагагүй болно.

Алхам

2 -р хэсгийн 1: SQL тарилгын тухай ойлголт

Алхам 1. SQL Injection бол SQL мэдээллийн санг ашигладаг програмуудын эмзэг байдлын төрөл юм

Сул тал нь SQL мэдэгдэлд хэрэглэгчийн оролтыг ашиглах үед үүсдэг.

$ нэр = $ _GET ['хэрэглэгчийн нэр']; $ query = "нууц үгийг сонгох FROM tbl_user WHERE name = '$ name'";

Алхам 2. Хэрэглэгчийн URL хувьсагчийн хэрэглэгчийн нэрэнд оруулах утга нь $ name хувьсагчид оногдоно

Үүнийг дараа нь SQL мэдэгдэлд шууд байрлуулснаар хэрэглэгч SQL хэллэгийг засварлах боломжтой болно.

$ name = "админы ЭСВЭЛ 1 = 1 -"; $ query = "нууц үгийг сонгох FROM tbl_user WHERE name = '$ name'";

Алхам 3. SQL мэдээллийн сан дараах байдлаар SQL мэдэгдлийг хүлээн авна

Tbl_users -аас нууц үгийг сонгоно уу WHERE name = 'admin' OR 1 = 1 - '

  • Энэ нь хүчин төгөлдөр SQL боловч хэрэглэгч нэг нууц үгээ буцааж өгөхийн оронд tbl_user хүснэгтэд байгаа бүх нууц үгийг буцааж өгөх болно. Энэ нь таны вэб аппликешнд хүсдэг зүйл биш юм.

    2 -р хэсгийн 2: Бэлэн мэдэгдлүүдийг үүсгэхийн тулд mySQLi -ийг ашиглах

    2542820 1
    2542820 1

    Алхам 1. mySQLi SELECT Query үүсгэх

    MySQLi бэлтгэсэн мэдэгдлийг ашиглан хүснэгтээс өгөгдлийг сонгохдоо доорх кодыг ашиглана уу.

    $ нэр = $ _GET ['хэрэглэгчийн нэр']; if ($ stmt = $ mysqli-> бэлтгэх ("tbl_users WHROE name =?" гэсэн нууц үгийг SELECT)) {// Хувьсагчийг параметр болгон тэмдэгт мөр болгон холбоно уу. $ stmt-> bind_param ("s", $ name); // Мэдэгдлийг гүйцэтгэх. $ stmt-> execute (); // Асуултаас хувьсагчдыг авах. $ stmt-> bind_result ($ pass); // Өгөгдлийг татаж авах. $ stmt-> авах (); // Өгөгдлийг харуулах. printf (" %s хэрэглэгчийн нууц үг бол %s / n", $ нэр, $ pass); // Бэлтгэсэн мэдэгдлийг хаах. $ stmt-> close (); }

    Тэмдэглэл: $ mysqli хувьсагч нь mySQLi холболтын объект юм

    2542820 2
    2542820 2

    Алхам 2. mySQLi INSERT Query үүсгэх

    Доорх кодыг ашиглан өгөгдлийг mySQLi бэлтгэсэн мэдэгдлийг ашиглан хүснэгтэд оруулна уу.

    $ нэр = $ _GET ['хэрэглэгчийн нэр']; $ нууц үг = $ _GET ['нууц үг']; if ($ stmt = $ mysqli-> бэлдэх ("INSERT INTO tbl_users (нэр, нууц үг) VALUES (?,?)"))) // Хувьсагчдыг параметр болгон мөр болгон холбоно уу. $ stmt-> bind_param ("ss", $ нэр, $ нууц үг); // Мэдэгдлийг гүйцэтгэх. $ stmt-> execute (); // Бэлтгэсэн мэдэгдлийг хаах. $ stmt-> close (); }

    Тэмдэглэл: $ mysqli хувьсагч нь mySQLi холболтын объект юм

    2542820 3
    2542820 3

    Алхам 3. mySQLi UPDATE Query үүсгэх

    MySQLi -ийн бэлтгэсэн мэдэгдлийг ашиглан хүснэгт дэх өгөгдлийг шинэчлэхийн тулд доорх кодыг ашиглана уу.

    $ нэр = $ _GET ['хэрэглэгчийн нэр']; $ нууц үг = $ _GET ['нууц үг']; if ($ stmt = $ mysqli-> бэлтгэх ("UPDATE tbl_users SET password =? WHERE name =?")) {// Хувьсагчдыг параметр болгон мөр болгон холбоно уу. $ stmt-> bind_param ("ss", $ нууц үг, $ нэр); // Мэдэгдлийг гүйцэтгэх. $ stmt-> execute (); // Бэлтгэсэн мэдэгдлийг хаах. $ stmt-> close (); }

    Тэмдэглэл: $ mysqli хувьсагч нь mySQLi холболтын объект юм

    2542820 4
    2542820 4

    Алхам 4. mySQLi DELETE Query үүсгэх

    Доорх скрипт нь хүснэгтээс өгөгдлийг mySQLi бэлтгэсэн мэдэгдлийг ашиглан хэрхэн устгах тухай юм.

    $ нэр = $ _GET ['хэрэглэгчийн нэр']; $ нууц үг = $ _GET ['нууц үг']; if ($ stmt = $ mysqli-> бэлдэх ("tbl_users WHERE name =?" DELETE) "{) Хувьсагчийг параметр болгон мөр болгон холбоно уу. $ stmt-> bind_param ("s", $ name); // Мэдэгдлийг гүйцэтгэх. $ stmt-> execute (); // Бэлтгэсэн мэдэгдлийг хаах. $ stmt-> close (); }

Зөвлөмж болгож буй: