جلوگیری از حمله SQL Injection در فریم ورک لاراول (Laravel)
حمله تزریق کد SQL یا به اصطلاح SQL Injection زمانی به وجود می آید که برنامه شما بدون بررسی ورودی های کاربر، آن ها را با کوئری های SQLخود ترکیب کند. ورودی های کاربر میتواند از نوع Cookieها، متغیر های سرور، یا اغلب به صورت ورودی های GET و POST باشد. این حملات برای دسترسی یا تغییر داده هایی است که به طور معمول در دسترس نیستند و گاهی اوقات عملکرد نرمال برنامه را مختل خواهند کرد.
در چند مقاله قبلی به معرفی و چگونگی انتخاب یک فریم ورک مناسب در زبان برنامه نویسی PHP وهمچنین نصب و ایمن سازی پیکربندی فریم ورک لاراول (Laravel) به عنوان یکی ازمحبوبترین فریم ورک های این زبان برنامه نویسی پرداختیم. در این پست قصد داریم نحوه جلوگیری از حمله بسیار متداول تزریق کد SQL در این فریم ورک را بیان نماییم.
به طور پیش فرض، Laravel از شما در برابر این نوع حملات محافظت خواهد کرد، زیرا در پشت صحنه،Query Builder و Eloquent، از کلاس های PDO استفاده می کنند.
PDO به شما اجازه می دهد تا هر پارامتری را بدون نیاز به تغییر و فیلتر کردن به طور ایمن منتقل کنید.
در برخی موارد ممکن است بخواهید کوئری های پیچیده تر و خاص تری را روی پایگاه داده اجرا کنید در لاراول میتوانید جهت اجرای عملیات select، update، insert و delete از توابع موجود در کلاس DB استفاده کنید.
هنگام استفاده از این روش، باید مراقب باشید که هیچ گونه کوئری آسیب پذیری مانند مثال زیر را ایجاد نکنید:
Route::get(‘sql-injection-vulnerable’, function() {
$name = “‘Bobby’ OR 1=1”;
return DB::select(“SELECT * FROM cats WHERE name = $name”);
});
برای محافظت در برابر این نوع کوئری از SQL injection، شما باید پارامترها را با علامت سوال مجددا بازنویسی کنید و سپس مقادیر را در یک آرایه به عنوان آرگومان دوم به تابع ارسال کنید به مثال زیر توجه کنید:
Route::get(‘sql-injection-not-vulnerable’, function() {$name = “‘Bobby’ OR 1=1”;return DB::select(“SELECT * FROM cats WHERE name = ?”, [$name]);});.