Real Time Web Analytics کانال تلگرام لرن روت

Laravel

جلوگیری از حمله SQL Injection در لاراول

نویسنده : کامران جعفری
تاریخ انتشار:
22:48:07 1394-07-22
حمله SQL Injection یا تزریق SQL چیست و چطور می توان از آن جلوگیری کرد؟

SQL Injection یا تزریق SQL یک حمله موثر و بسیار مخرب به وب سایت ها می باشد. در این مقاله به بررسی مکانیزم این حمله می پردازیم و در پایان نحوه مقابله با آن در فریم ورک لاراول را توضیح خواهیم داد. با لرن روت همراه باشید.

حمله SQL Injection حمله ای است که در آن مهاجم با دستکاری کوئری های SQL اهداف خود را عملی می سازد. برای درک بهتر این حمله به مثال زیر توجه کنید:
فرض کنید شما در قسمتی از وب سایت خود از کاربر ایمیل او را در خواست می کنید. ایمیل مورد نظر شما چیزی شبیه به user@yahoo.com است. مهاجم به جای ایمیل عبارت زیر را وارد می کند:

 user@yahoo.com or 1=1

نتیجه بصورت زیر خواهد بود:

Select * from users_table where email = ‘user@yahoo.com’ or 1=1

اگر با دستور منطقی 1=1 آشنا باشید می دانید که این یک عبارت همیشه درست است! پس نتیجه بازگشتی کوئری فوق لیست تمام کاربران است!
اما شاید مهاجم به این اندازه هم خوش قلب نباشد. فرض کنید او عبارت زیر را وارد کند:

‘user@yahoo.com’ ; drop table users_table; 

در صورت نداشتن فایل پشتیبان یا بک آپ از وب سایت تان، تمام فعالیت های وب سایت شما یکجا از بین خواهد رفت!
حالات دیگری نیز امکان پذیر است. مثلا شاید مهاجم بدون اجازه کاربران اطلاعات حیاتی آنان را سرقت کند و یا به رمزعبور مدیر دسترسی پیدا کرده و کنترل وب سایت را به دست گیرد.
در هر صورت این حمله بسیار موثر، کارآمد و خطرناک است. خوشبختانه در PHP با معرفی PDO این مشکل حل شده است. با استفاده از PDO ها در PHP، در متغیر ارسالی به کوئری تغییراتی صورت می گیرد تا نتواند اعمال خراب کارانه انجام شود. برای مثال با استفاده از PDO، کوئری فوق به شکل زیر درخواهد آمد:

Select * from users_table where email = ‘user@yahoo.com or 1=1’

در نتیجه چون کاربری با ایمیل user@yahoo.com or 1=1 موجود نیست، نتیجه ای بازنخواهد گشت. این اقدامات برای سایر حملات در SQL Injection نیز صورت می گیرد.
اما در لاراول این مشکل چگونه برطرف می شود؟ لاراول برای کوئری زدن به پایگاه داده از Eloquent ORM استفاده می کند، که آنها مبتنی بر PDO هستند. پس در هنگام کار با کوئری ها در لاراول، نگران حمله SQL Injection نباشید.
البته لاراول ویژگی به نام raw Sql نیز دارد که در صورت استفاده از آن خودتان باید اقدامات لازم برای جلوگیری ازحمله SQL Injection را انجام دهید. بر همین اساس استفاده از قابلیت raw Sql در لاراول مگر در شرایطی که مجبور به استفاده هستید توصیه نمی شود.

برچسب ها:
مقالات مشابه
ویدیوهای مشابه