كيفية منع حقن SQL في PHP (بالصور)

جدول المحتويات:

كيفية منع حقن SQL في PHP (بالصور)
كيفية منع حقن SQL في PHP (بالصور)

فيديو: كيفية منع حقن SQL في PHP (بالصور)

فيديو: كيفية منع حقن SQL في PHP (بالصور)
فيديو: تنظيف شاشة التلفزيون المسطحة بطريقة سليمة وصحيحة وعلمية تحافظ عليها وطريقة علاج خدوش الشاشة 2024, يمكن
Anonim

تعلمك مقالة ويكي هاو هذه كيفية منع حقن SQL باستخدام البيانات المعدة في PHP. يعد إدخال SQL أحد أكثر الثغرات الأمنية شيوعًا في تطبيقات الويب اليوم. تستخدم العبارات المعدة معلمات منضمة ولا تدمج المتغيرات مع سلاسل SQL ، مما يجعل من المستحيل على المهاجم تعديل عبارة SQL.

تدمج البيانات المعدة المتغير مع عبارة SQL المترجمة ، بحيث يتم إرسال SQL والمتغيرات بشكل منفصل. ثم يتم تفسير المتغيرات على أنها مجرد سلاسل وليست جزءًا من عبارة SQL. باستخدام الطرق الواردة في الخطوات أدناه ، لن تحتاج إلى استخدام أي تقنيات أخرى لتصفية حقن SQL مثل mysql_real_escape_string ().

خطوات

جزء 1 من 2: فهم حقن SQL

الخطوة الأولى. حقن SQL هو نوع من الثغرات الأمنية في التطبيقات التي تستخدم قاعدة بيانات SQL

تنشأ الثغرة الأمنية عند استخدام إدخال المستخدم في عبارة SQL:

$ name = $ _GET ['اسم المستخدم'] ؛ $ query = "حدد كلمة المرور من tbl_user WHERE name = '$ name'" ؛

الخطوة الثانية. القيمة التي يُدخلها المستخدم في اسم مستخدم متغير URL سيتم تعيينها إلى المتغير $ name

ثم يتم وضعها مباشرة في جملة SQL ، مما يتيح للمستخدم تحرير عبارة SQL.

$ name = "admin 'OR 1 = 1 -" ؛ $ query = "حدد كلمة المرور من 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

    الخطوة الأولى. قم بإنشاء استعلام mySQLi SELECT

    استخدم الكود أدناه لتحديد البيانات من جدول باستخدام البيانات المعدة من mySQLi.

    $ name = $ _GET ['اسم المستخدم'] ؛ if ($ stmt = $ mysqli-> تحضير ("SELECT password FROM tbl_users WHERE name =؟")) {// اربط متغيرًا بالمعامل كسلسلة. $ stmt-> bind_param ("s"، $ name)؛ // تنفيذ البيان. $ stmt-> تنفيذ () ؛ // احصل على المتغيرات من الاستعلام. $ stmt-> bind_result ($ pass)؛ // إحضار البيانات. $ stmt-> fetch ()؛ // عرض البيانات. printf ("كلمة المرور للمستخدم٪ s هي٪ s / n"، $ name، $ pass)؛ // أغلق البيان المعد. $ stmt-> close ()؛ }

    ملاحظة: المتغير mysqli $ هو كائن اتصال mySQLi

    2542820 2
    2542820 2

    الخطوة الثانية. قم بإنشاء استعلام mySQLi INSERT

    استخدم الكود أدناه لإدخال البيانات في جدول باستخدام MySQLi Prepared Statements.

    $ name = $ _GET ['اسم المستخدم'] ؛ $ password = $ _GET ['password'] ؛ if ($ stmt = $ mysqli-> تحضير ("INSERT INTO tbl_users (name، password) VALUES (؟،؟)")) {// اربط المتغيرات بالمعامل كسلاسل. $ stmt-> bind_param ("ss"، $ name، $ password)؛ // تنفيذ البيان. $ stmt-> تنفيذ () ؛ // أغلق البيان المعد. $ stmt-> close ()؛ }

    ملاحظة: المتغير mysqli $ هو كائن اتصال mySQLi

    2542820 3
    2542820 3

    الخطوة الثالثة. قم بإنشاء استعلام تحديث mySQLi

    استخدم الكود أدناه لتحديث البيانات في جدول باستخدام البيانات المعدة من mySQLi.

    $ name = $ _GET ['اسم المستخدم'] ؛ $ password = $ _GET ['password'] ؛ if ($ stmt = $ mysqli-> Prepar ("UPDATE tbl_users SET password =؟ WHERE name =؟")) {// اربط المتغيرات بالمعامل كسلاسل. $ stmt-> bind_param ("ss"، $ password، $ name)؛ // تنفيذ البيان. $ stmt-> تنفيذ () ؛ // أغلق البيان المعد. $ stmt-> close ()؛ }

    ملاحظة: المتغير mysqli $ هو كائن اتصال mySQLi

    2542820 4
    2542820 4

    الخطوة 4. قم بإنشاء استعلام الحذف في mySQLi

    البرنامج النصي أدناه هو كيفية حذف البيانات من جدول باستخدام البيانات المعدة من mySQLi.

    $ name = $ _GET ['اسم المستخدم'] ؛ $ password = $ _GET ['password'] ؛ if ($ stmt = $ mysqli-> PreparE ("DELETE FROM tbl_users WHERE name =؟")) {// اربط المتغير بالمعامل كسلسلة. $ stmt-> bind_param ("s"، $ name)؛ // تنفيذ البيان. $ stmt-> تنفيذ () ؛ // أغلق البيان المعد. $ stmt-> close ()؛ }

موصى به: