כיצד למנוע הזרקת SQL ב- PHP (עם תמונות)

תוכן עניינים:

כיצד למנוע הזרקת SQL ב- PHP (עם תמונות)
כיצד למנוע הזרקת SQL ב- PHP (עם תמונות)

וִידֵאוֹ: כיצד למנוע הזרקת SQL ב- PHP (עם תמונות)

וִידֵאוֹ: כיצד למנוע הזרקת SQL ב- PHP (עם תמונות)
וִידֵאוֹ: איך לתלות טלוויזיה על קיר בלוקים או על קיר גבס. 2024, מאי
Anonim

WikiHow זה מלמד אותך כיצד למנוע הזרקת SQL באמצעות הצהרות מוכנות ב- PHP. הזרקת SQL היא אחת הפגיעות הנפוצות ביותר ביישומי אינטרנט כיום. הצהרות מוכנות משתמשות בפרמטרים קשורים ואינן משלבות משתנים עם מחרוזות SQL, מה שמאפשר לתוקף לשנות את משפט SQL.

הצהרות מוכנות משלבות את המשתנה עם משפט SQL המורכב, כך שה- SQL והמשתנים נשלחים בנפרד. המשתנים מתפרשים אז כמחרוזות בלבד ולא כחלק מהצהרת SQL. באמצעות השיטות בשלבים שלהלן, לא תצטרך להשתמש בכל טכניקות סינון הזרקת SQL אחרות כגון mysql_real_escape_string ().

צעדים

חלק 1 מתוך 2: הבנת הזרקת SQL

שלב 1. הזרקת SQL היא סוג של פגיעות ביישומים המשתמשים במסד נתונים של SQL

הפגיעות מתעוררת כאשר משתמשים בקלט משתמש בהצהרת SQL:

$ name = $ _GET ['שם משתמש']; $ query = "בחר סיסמה מתוך tbl_user WHERE name = '$ name'";

שלב 2. הערך שהמשתמש מכניס לשם המשתמש של משתנה ה- URL יוקצה למשתנה $ name

לאחר מכן הוא ממוקם ישירות במשפט SQL, ומאפשר למשתמש לערוך את משפט SQL.

$ name = "admin 'OR 1 = 1 -"; $ query = "בחר סיסמה מתוך tbl_user WHERE name = '$ name'";

שלב 3. לאחר מכן מסד הנתונים של SQL יקבל את משפט SQL כדלקמן:

בחר סיסמה מ- tbl_users WHERE שם = 'מנהל' או 1 = 1 - '

  • זהו SQL חוקי, אך במקום להחזיר סיסמה אחת למשתמש, המשפט יחזיר את כל הסיסמאות בטבלה tbl_user. זה לא משהו שאתה רוצה ביישומי האינטרנט שלך.

    חלק 2 מתוך 2: שימוש ב- mySQLi ליצירת הצהרות מוכנות

    2542820 1
    2542820 1

    שלב 1. צור את שאילתת mySQLi SELECT

    השתמש בקוד שלהלן כדי לבחור נתונים מטבלה באמצעות הצהרות מוכנות של mySQLi.

    $ name = $ _GET ['שם משתמש']; if ($ stmt = $ mysqli-> Prepar ("בחר סיסמה מתוך tbl_users WHERE שם =?")) {// לאגד משתנה לפרמטר כמחרוזת. $ stmt-> bind_param ("s", $ שם); // בצע את ההצהרה. $ stmt-> execute (); // קבל את המשתנים מהשאילתה. $ stmt-> bind_result ($ מעבר); // תביא את הנתונים. $ stmt-> להביא (); // הצג את הנתונים. printf ("הסיסמה למשתמש %s היא %s / n", $ name, $ pass); // סגור את ההצהרה המוכנה. $ stmt-> close (); }

    הערה: המשתנה $ mysqli הוא אובייקט החיבור mySQLi

    2542820 2
    2542820 2

    שלב 2. צור את שאילתת mySQLi INSERT

    השתמש בקוד להלן כדי להכניס נתונים לטבלה באמצעות הצהרות מוכנות של mySQLi.

    $ name = $ _GET ['שם משתמש']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> Prepar ("הכנס ל- tbl_users (שם, סיסמה) VALUES (?,?)"))) {// נקשר את המשתנים לפרמטר כמחרוזות. $ stmt-> bind_param ("ss", $ שם, $ סיסמה); // בצע את ההצהרה. $ stmt-> execute (); // סגור את ההצהרה המוכנה. $ stmt-> close (); }

    הערה: המשתנה $ mysqli הוא אובייקט החיבור mySQLi

    2542820 3
    2542820 3

    שלב 3. צור את שאילתת UPDATE של mySQLi

    השתמש בקוד שלהלן כדי לעדכן נתונים בטבלה באמצעות הצהרות מוכנות של mySQLi.

    $ name = $ _GET ['שם משתמש']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> prepare ("UPDATE tbl_users SET password =? WHERE name =?")) {// לאגד את המשתנים לפרמטר כמחרוזות. $ stmt-> bind_param ("ss", $ password, $ name); // בצע את ההצהרה. $ stmt-> execute (); // סגור את ההצהרה המוכנה. $ 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", $ שם); // בצע את ההצהרה. $ stmt-> execute (); // סגור את ההצהרה המוכנה. $ stmt-> close (); }

מוּמלָץ: