چگونه MySQL از تزریق sql جلوگیری می کند؟ اصل تزریق SQL و پیشگیری

خروجیچگونه از تزریق sql جلوگیری کنیم؟ اصل تزریق SQL و پیشگیری

خروجی و تزریق 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 اسمبلی پویا استفاده نکنید، می توانید از sql پارامتری شده یا مستقیماً از رویه های ذخیره شده برای پرس و جو و دسترسی داده ها استفاده کنید.
  • 3. هرگز از اتصالات پایگاه داده با امتیازات مدیر استفاده نکنید، از اتصالات پایگاه داده جداگانه با امتیازات محدود برای هر برنامه استفاده کنید.
  • 4. اطلاعات محرمانه را مستقیماً ذخیره نکنید، رمزهای عبور و اطلاعات حساس را رمزگذاری یا هش نکنید.
  • 5. اطلاعات استثنای برنامه باید تا حد امکان نکات کمتری ارائه دهد و بهتر است از اطلاعات خطای سفارشی برای بسته بندی اطلاعات خطای اصلی استفاده کنید.
  • 6. روش تشخیص تزریق sql به طور کلی کمکی را اتخاذ می کندنرم افزاریا پلت فرم وب سایت برای شناسایی، نرم افزار به طور کلی از ابزار تشخیص تزریق sql jsky استفاده می کند، پلت فرم وب سایت دارای ابزار تشخیص پلت فرم امنیتی وب سایت Yisi است. MDCSOFT SCAN و همکاران.استفاده از 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 را مشخص می کند.

وبلاگ امید چن ویلیانگ ( https://www.chenweiliang.com/ ) shared "چگونه MySQL از تزریق sql جلوگیری می کند؟ اصل تزریق sql و پیشگیری» به شما کمک خواهد کرد.

به اشتراک گذاری لینک این مقاله خوش آمدید:https://www.chenweiliang.com/cwl-500.html

به کانال تلگرام وبلاگ چن ویلیانگ خوش آمدید تا از آخرین به روز رسانی ها مطلع شوید!

🔔 اولین نفری باشید که "راهنمای استفاده از ابزار هوش مصنوعی بازاریابی محتوایی ChatGPT" را در فهرست بالای کانال دریافت می کنید! 🌟
📚 این راهنما حاوی ارزش بسیار زیادی است، 🌟این یک فرصت نادر است، آن را از دست ندهید! ⏰⌛💨
اگر دوست داشتید به اشتراک بگذارید و لایک کنید
اشتراک گذاری و لایک های شما انگیزه مستمر ما هستند!

 

发表 评论

آدرس ایمیل شما منتشر نخواهد شد. از زمینه های مورد نیاز استفاده می شود * 标注

به بالا بروید