PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش بستن باگ SQL injection در PHP



ParnianData
December 23rd, 2015, 11:47
سلام روزتون بخیر

خب بی مقدمه بریم سراغ اموزش:

آموزش بستن باگ 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'


به این صورت ورودی ما امن شد .

در جلسات بعدی بصورت ترکیبی اقدام به ساخت یه مجموعه ای از توابع برای ایمن کردن ورودی ها خواهیم پرداخت .

موفق باشید .

با تشکر از گروه ادمینا
فایل پی دی اف هم ضمیمه شد

yastheme
December 23rd, 2015, 15:29
mysql_real_scape_string به تنهایی برای SQL Injection کافی نیست و اسکریپت شما را امن نمی کند.
باید از توبع دیگر هم استفاده کرد

J0k3R
December 23rd, 2015, 16:59
ممنون.مفید بود

GREAT
December 23rd, 2015, 17:40
سلام روزتون بخیر

خب بی مقدمه بریم سراغ اموزش:

آموزش بستن باگ 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'


به این صورت ورودی ما امن شد .

در جلسات بعدی بصورت ترکیبی اقدام به ساخت یه مجموعه ای از توابع برای ایمن کردن ورودی ها خواهیم پرداخت .

موفق باشید .

با تشکر از گروه ادمینا
فایل پی دی اف هم ضمیمه شد

مطلب مفیدی بود
اما نیاز هست توابع دیگر مربوط به مای اسکیو ال نیز امن شوند تا امنیت به حد مطلوب برسد!
بحرحال ممنون از اموزش

ParnianData
December 23rd, 2015, 18:36
mysql_real_scape_string به تنهایی برای SQL Injection کافی نیست و اسکریپت شما را امن نمی کند.
باید از توبع دیگر هم استفاده کرد


بله درسته

انشالله توی همین تاپیک سایر توابع رو اموزش خواهیم داد

ممنون از توضیحتون
موفق باشید

- - - Updated - - -


مطلب مفیدی بود
اما نیاز هست توابع دیگر مربوط به مای اسکیو ال نیز امن شوند تا امنیت به حد مطلوب برسد!
بحرحال ممنون از اموزش

بله درست هست
انشالله سایر اموزش ها رو هم قرار میدیم تا دوستان عزیز استفاده کنند
موفق باشید

us12
December 24th, 2015, 16:49
با استفاده از PDO دیگه نگران انجکشن نباشید . فقط بحث روش های دیگر هک مثل xxs مطرح است.

nimdad
January 13th, 2016, 00:27
در کل بهتره از mysqli استفاده کنید که این مشکلات رو نداشته باشید...