سلام روزتون بخیر
خب بی مقدمه بریم سراغ اموزش:
آموزش بستن باگ SQL injection در PHP :
اول بپردازیم به این که این باک ها چجوری ایجاد میشن .
ببینید در بحث واکشی از پایگاه داده ما از طریق دستورات PHP یه Query جاری میکنیم تا اطلاعات مارو از دیتابیس بخونه برای مثال :
SELECT * FROM content WHERE title='ParnianData'
در این کوئری ما درخواست کردیم تا هرچی ستون هست رو جایی که تایتل ما ParnianData هست انتخاب کن .
خوب اگه ورودی های ما امن نباشه هکر میتونه یه سری دستورات دیگه به این کوئری ما تزریق کنه . برای مثال :
SELECT * FROM content WHERE title=$_GET['title']
ما خواستیم هرچیزی که در مقدار title هست جستجو بشه در حقیقت هرچیزی در آدرس بار در مقدار title هست داخل دیتابیس سرچ بشه به این صورت :
localhost/post.php?title=ParnianData
حالا برای خراب کردن این کوئری کافیه یدونه ' در آخر آدرس بار وارد کنیم .
localhost/post.php?title=ParnianData'
جالا کوئری جاری میشه :
SELECT * FROM content WHERE title=$_GET['title']'
و اروری نشون میده مبنی بر این که کوئری سالم نیست .
و از این طریق هکر میفهمه که ورودی های ما امن نیست و میشه دستورات رو تزریق کرد .
خوب حالا هکر میاد از طریق دستورات ORDER BY , Union Select تعداد ستون ها و ردیف های مارو از دیتابیس میخونه و شروع میکنه به بیرون کشیدن نام جدول هامون .
و سپس کوئری مورد نظر خودش رو تزریق میکنه تا به رمز و یوزر مدیریت سایت برسه و یا محتوایی رو روی وبسایت اضافه یا کم کنه .
برای جلوگیری از این نوع حملات چند تا راه داریم که یکیش امن کردن ورودی های ماست .
ما میتونیم از توابع موجود زیادی در PHP برای امن کردن ورودی ها استفاده کنیم .
به عنوان مثال :
filter_var
str_replace
mysql_real_scape_string
.
.
.
ما توی این جلسه قصد داریم با مورد سوم کار کنیم .
برای شروع کار ما باید ورودی رو داخل یه متغیر بریزیم :
$title = $_GET['title']
حالا امن کنیم :
$title = mysql_real_scape_string($_GET['title'])
در این صورت ورودی ما بصورت استرینگ های قابل قبول برای Mysql تعریف میشه و اگه کاراکتر غیر مجاز یا کوئری دیگه ای بخوایم جاری کنیم تبدیل میشه به یه چیز نا مفهوم .
و حالا متغیر تایتل رو در کوئری مورد نظر جایگذین میکنیم :
$title = mysql_real_scape_string($_GET['title'])
SELECT * FROM content WHERE title='$title'
به این صورت ورودی ما امن شد .
در جلسات بعدی بصورت ترکیبی اقدام به ساخت یه مجموعه ای از توابع برای ایمن کردن ورودی ها خواهیم پرداخت .
موفق باشید .
با تشکر از گروه ادمینا
فایل پی دی اف هم ضمیمه شد