כיצד MySQL מונע הזרקת sql? עקרון הזרקת SQL ומניעה

MySQLכיצד למנוע הזרקת sql? עקרון הזרקת SQL ומניעה

MySQL והזרקת SQL

אם אתה לוקח את הנתונים שהזין המשתמש דרך דף אינטרנט ותכניס אותם ל-aמסד נתונים של MySQL, אז ייתכנו בעיות אבטחה בהזרקת SQL.

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

מה שנקרא הזרקת SQL היא להונות את השרת לבצע פקודות SQL זדוניות על ידי הכנסת פקודות SQL לטופס האינטרנט כדי לשלוח או להזין את מחרוזת השאילתה של שם הדומיין או בקשת הדף.

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

בדוגמה הבאה, שם המשתמש שהוזן חייב להיות שילוב של אותיות, מספרים וקווים תחתונים, ושם המשתמש חייב להיות באורך של בין 8 ל-20 תווים:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

הבה נסתכל על מצב ה-SQL שמתרחש כאשר לא מסוננים תווים מיוחדים:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

במשפט ההזרקה הנ"ל לא סיננו את המשתנה של $name, ומשפט ה-SQL שאנחנו לא צריכים מוכנס ל-$name, מה שימחק את כל הנתונים בטבלת המשתמשים.

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

כדי למנוע הזרקת SQL, עלינו לשים לב לנקודות הבאות:

  • 1. לעולם אל תבטח בקלט המשתמש.בדוק את הקלט של המשתמש, אתה יכול להשתמש בביטויים רגולריים, או להגביל את האורך; המרת מרכאות בודדות וכפול "-" וכו'.
  • 2. לעולם אל תשתמש ב-sql assembly דינמי, אתה יכול להשתמש ב-sql עם פרמטרים או להשתמש ישירות בפרוצדורות מאוחסנות עבור שאילתת נתונים וגישה.
  • 3. לעולם אל תשתמש בחיבורי מסד נתונים עם הרשאות מנהל, השתמש בחיבורי מסד נתונים נפרדים עם הרשאות מוגבלות עבור כל יישום.
  • 4. אין לאחסן מידע סודי ישירות, להצפין או לחלץ סיסמאות ומידע רגיש.
  • 5. המידע החריג של האפליקציה צריך לתת כמה שפחות רמזים, ועדיף להשתמש במידע שגיאה מותאם אישית כדי לעטוף את פרטי השגיאה המקוריים
  • 6. שיטת הזיהוי של הזרקת sql מאמצת בדרך כלל עזרתוכנהאו את פלטפורמת האתר לזיהוי, התוכנה משתמשת בדרך כלל בכלי זיהוי הזרקת sql jsky, ולפלטפורמת האתר יש את כלי זיהוי פלטפורמת האבטחה של האתר Yisi. MDCSOFT SCAN et al.שימוש ב-MDCSOFT-IPS יכול להגן ביעילות מפני הזרקת SQL, התקפות XSS וכו'.

מניעת הזרקת SQL

בשפות סקריפטים כמו Perl ו-PHP אתה יכול לברוח מהנתונים שהזין המשתמש כדי למנוע הזרקת SQL.

הרחבה MySQL עבור PHP מספקת את הפונקציה mysqli_real_escape_string() כדי לברוח מתווי קלט מיוחדים.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

הזרקה בהצהרות לייק

בעת שאילתה כמו, אם המשתמש יזין ערכים עם "_" ו-"%", זה יקרה: המשתמש רצה במקור לבצע שאילתה "abcd_", אך תוצאות השאילתה כוללות "abcd_", "abcde" ו-"abcdf " וכו'; הבעיה מתרחשת גם כאשר המשתמש רוצה לבצע שאילתה "30%" (הערה: שלושים אחוז).

בסקריפט PHP נוכל להשתמש בפונקציה addcslashes() כדי לטפל במצב שלמעלה, כמו בדוגמה הבאה:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

הפונקציה addcslashes() מוסיפה קו נטוי לפני התו שצוין.

פורמט תחביר:

addcslashes(string,characters)
参数תיאור
מחרוזתנדרש.מציין את המחרוזת שיש לבדוק.
תוויםאופציונאלי.מציין את התו או טווח התווים המושפעים מ-adcslashes().

Hope Chen Weiliang בלוג ( https://www.chenweiliang.com/ ) shared "כיצד MySQL מונע הזרקת sql? עקרון הזרקת sql ומניעה", זה יעזור לך.

מוזמנים לשתף את הקישור של מאמר זה:https://www.chenweiliang.com/cwl-500.html

ברוכים הבאים לערוץ הטלגרם של הבלוג של Chen Weiliang כדי לקבל את העדכונים האחרונים!

🔔 היה הראשון לקבל את "מדריך השימוש בכלי AI של ChatGPT Content Marketing" בספרייה העליונה של הערוץ! 🌟
📚 המדריך הזה מכיל ערך עצום, 🌟זו הזדמנות נדירה, אל תפספסו אותה! ⏰⌛💨
שתפו ותעשו לייק אם בא לכם!
השיתוף והלייקים שלך הם המוטיבציה המתמשכת שלנו!

 

发表 评论

כתובת האימייל שלך לא תפורסם. 必填 项 已 用 * תווית

גלול למעלה