راهنمای بهبود امنیت سایتهای Laravel
لاراول (laravel) به صورت پیشفرض مکانیزمها و ابزارهایی را برای حفظ و افزایش امنیت پروژههای لاراولی دارد.
با این حال، برای افزایش ضریب امنیت پروژههای لاراولی میتوان کارها و اقداماتی را انجام داد تا میزان امنیت پروژههای لاراولی، افزایش پیدا کند که در این پست به برخی از این موارد اشاره خواهیم داشت.
1- اقدامات لازم بعد از راهاندازی پروژه لاراول
عموما اکثر کاربران، بعد از آپلود فایل زیپ پروژه، این فایل را به حال خود رها میکنند و تا مدتها و حتی گاهی برای همیشه این فایل بر روی هاست وجود دارد.
وجود این فایل بر روی هاست، باعث میشود که هکرها و کسانی که به دنبال پیدا کردن نقاط ضعف پروژه و وبسایت هستند بتوانند با ابزارهایی که در اختیار دارند، این فایلها را پیدا کنند.
با دانلود فایل پروژه، با ساختار پروژه آشنا شده و در فرصت کافی و مناسب بعد از تجزیه و تحلیل کدها، نقطه ضعفهای احتمالی پروژه را پیدا و برای نفوذ و آسیب رساندن به پروژه استفاده کنند.
برای پیشگیری از این مورد، باید بلافاصله بعد از راه اندازی کامل پروژه، فایل زیپ پروژه از روی هاست حذف و یا در صورت نیاز به وجود فایل بر روی هاست، در یک فولدر جداگانه با پریمیشن 400 منتقل شود تا فقط ادمین پروژه به آن دسترسی داشته باشد.
حذف لاگهای ارور پروژه
مورد دیگر، حذف ارورلاگ های پروژه از روی هاست میباشد.
ارورلاگهای ایجاد شده در پروژه، به ما برای رفع خطاهای پروژه کمک میکنند؛ اما میتواند ابزاری برای پیدا کردن نقاط ضعف پروژه باشد.
عموما ارورلاگهای پروژههای لاراولی در مسیر storage/logs/ قرار داد و تمام خطاهای پروژه برای بررسی و تجزیه و تحلیل در این فولدر ایجاد میشوند.
برای امنیت بیشتر باید فایلهای لاگ ایجاد شده، بعد از انجام دباگ، حذف شوند.
همینطور تاریخچه دستوراتی که در ترمینال سی پنل وارد شده است، میتواند اطلاعات حیاتی را در اختیار هکرها و نفوذگران قرار دهد.
با دستور history -c میتوان تاریخچه دستورات وارد شده در ترمینال را حذف کرد.
با استفاده از فایل htaccess می توان دسترسی به بعضی فولدرها و لینکها را به آیپیهای خاص محدود کرد که ضریب امنیت سایت را بالا میبرد.
2- بروزرسانیهای مداوم و همیشگی لاراول و پکیجهای نصب شده در پروژه
با برورسانی هسته لاراول و پکیجهایی که در پروژه استفاده شده است، امنیت پروژه بالا میرود و امکان بروز خطا به حداقل ممکن میرسد.
بعد از راهاندازی پروژه، به صورت مداوم و منظم، نسخه لاراول و پکیجهای نصب شده، بررسی و بروز شود.
البته پیشنهاد میشود قبل از بروزرسانی، یک نسخه از پروژه بر روی لوکال و یا بر روی سابدامنه، راهاندازی شود و بعد از تست و تغییرات لازم، بروزرسانیها به وبسایت اصلی منتقل و اعمال شود.
نکته مهم دیگر، خاموش بودن دباگ است.
هر زمان که نیاز ضروری به دباگ پروژه است، دباگ فعال و بعد از انجام دباگ و رفع خطا، دباگ غیرفعال شود.
3- انتخاب بروزترین نسخه php پایدار برای پروژه
در نسخه های جدید لاراول، در صورتی که نسخه php پایینتر از نسخه مورد نیاز باشد، خطایی نمایش داده می شود و در خطای نمایش داده شده، ورژن مورد نیاز برای اجرا نمایش داده می شود.
برای امنیت پروژه، همیشه باید ورژن php، متناسب با پروژه انتخاب شود.
4- رمزنگاری قوی برای اطلاعات ذخیره شده در دیتابیس
یکی از سادهترین اصول امنیت دادهها، ذخیره کردن اطلاعات مخصوصا اطلاعات کاربران به صورت رمز شده در دیتابیس است.
با مروری در اخبار نفوذ و هک میبینبم که گاهی حتی وبسایتهای بزرگ و معتبر هم از این امر غافل بوده و بعد از هک شدن، تمام و یا بخشی از اطلاعات مشتریان و کاربران در اینترنت پخش شده و مورد سواستفاده قرار گرفته است.
در لاراول میتوان از از الگوریتمهای قوی هش پسورد مانند bcrypt یا Argon2 استفاده کرد تا پسوردها به صورت هش شده در دیتابیس ذخیره شود.
زمانی که کاربر پسورد خود را وارد میکند، مجدد توسط الگوریتم تعریف شده، هش شده و با مقدار ذخیره شده در دیتابیس مطابقت داده می شود و ذر صورت مساوی بودن دو مقدار، امکان ورود خواهد داشت.
البته به طور کلی در پروژه تا حد امکان باید کمترین اطلاعات از کاربر دریافت شده و فقط به دریافت اطلاعات ضروری بسنده کرد.
با استفاده از دو ویژگی Secure و HttpOnly باعث افزایش امنیت استفاده از کوکیهای ایجاد شده بر روی مرورگر کاربر خواهد شد و امکان هک و نفوذ به پروژه کاهش مییابد.
5- ایجاد محدودیتهای بیشتر برای دسترسی برای کاربران
احراز هویت چند عاملی (MFA) یا Multi-factor authentication به این معنی است که کاربر علاوه بر ورود یوزرنیم و پسورد، باید مقادیر دیگری را هم وارد کند، از جمله موارد رایج، پیامک ارسال شده برای کاربر است که امکان لاگین افراد دیگری که ممکن است که به یوزرنیم و پسورد یک کاربر دست پیدا کرده باشند را از بین میبرد.
برای امنیت بیشتر لاگین کاربر در لاراول میتوان از پکیج های Laravel Passport و یا Laravel Socialite استفاده کرد.
6- اعتبارسنجی ورودی های کاربر
همیشه فیلدهای ورودی یک فرم موجود بر روی یک وبسایت، میتواند یکی از نقاط صعف آن محسوب شود و به هکرها اجازه وارد کردن کدها و تستکردن دستورات خاصی را بدهد که در صورتی که این ورودیها اعتبارسنجی نشوند، ضریب امنیت وبسایت را به شدت کاهش میدهد.
ورودیهای کاربر قبل از استفاده در پروژه، باید اعتبارسنجی و پاکسازی شود تا از تزریق SQL, XSS و سایر حملات، جلوگیری شود.
7- بکآپ گیری منظم و دوره ای
برای یک وبسایت و یا پروژه، هیچ چیز دردناکتر و بدتر از دسترفتن اطلاعات نیست.
در صورتی که به هر دلیل پروژه و یا وبسایت هک شد و با به هر دلیل انسانی و یا سهوی اطلاعات حذف شد، اهمیت داشتن یک بکآپ پایدار از آخرین اطلاعات وبسایت مشخص میشود.
پیشنهاد میشود همیشه به صورت منظم و مداوم از اطلاعات هاست خود بکآپ داشته باشید تا بتوانید در صورت نیاز آن را رستور کنید.
برای تهیه فول بکآپ در سیپنل میتوانید از آموزش زیر استفاده کنید:
آموزش تهیه فول بک آپ سی پنل
8- تست نفوذ
برای پروژههای بزرگ لاراول و یا وبسایتهایی که نیاز به امنیت بالایی دارند، نیاز است از خدمات شرکتهایی که در زمینه تجزیه و تحلیل و تست امنیت، خدمات ارائه میدهند، استفاده کرد.
این شرکتها به دلیل تخصص و داشتن دانش کافی، میتوانند جنبههای مختلف وبسایت و پروژه را بررسی و نقاط ضعف را شناسایی کنند و راه حلهایی برای افزایش امنیت ارائه دهند.
9- عوامل انسانی و آموزش ادمین های یک وب سایت و پروژه
طبق نقلقول یکی از بزرگترین هکرها، شرکتها بر روی افزایش و بالا بردن ضریب امنیت کدها و پروژهها کار میکنند؛ اما از آموزش و ارتقای دانش کارکنان و مدیران خود غافل هستند.
بسیاری از هکها و نفوذها نه به علت ضعیف بودن و یا نداشتن امنیت پروژه بوده، بلکه به خاطر سهلانگاری و یا خطای انسانی کارکنان و افرادی بوده که به یک سیستم دسترسی داشتند.
به موازات افزایش ضریب امنیت پروژه، باید آموزشهای لازم هم در اختیار افرادی که با اطلاعات حساس سر و کار دارند، داده شود.
10- لاگ ورود و خروج و اسکن فعالیتهای مشکوک
در هر پروژهای باید تمام اطلاعات لاگین و ورود و خروج کاربران، ثبت و ذخیره شود و تمام تلاشهای ناموفق و اطلاعات آن، باید در جایی ذخیره شود تا در صورت نیاز، نسبت به مسدود کردن آیپی و یا سایر اقدامات لازم برای ایجاد محدودیت برای لاگین، صورت گیرد.
11 – و موارد عمومی برای داشتن امنیت کافی در پروژه
با وجودی که بارها و بارها در مقالات مختلف به این مورد اشاره شده است، اما باز هم بسیار از مدیران پروژه، از پسوردهای بسیار ساده و قابل حدس در پروژه استفاده میکنند.
بسیاری از پروژههای بزرگ با یوزرنیم و پسورد admin هک شدند و یا اکانتهایی که با بالاترین سطح، برای یک برنامهنویس تعریف شدند، اما پس از اتمام پروژه حذف نشدند و توسط هکرها مورد استفاده قرار گرفتند.
استفاده از پسوردهای ساده و یا استفاده از شماره همراه به عنوان پسورد، مثال هایی در این مورد هستند.
پسوردها باید به صورت منظم و دورهای تغییر داده شوند.
رمزهای عبور قوی باید ترکیبی از اعداد، حروف کوچک و بزرگ و کاراکترهای خاص باشند تا غیرقابل حدس و کشف باشند.
استفاده و لاگین از سیستمها و اماکن عمومی و لاگین به پروژه ممکن است در سیستم ذخیره شده و در اولین فرصت باید پسورد تغییر داده شود.
به عنوان سخن آخر، امنیت یک پروژه یک روند ادامه دار و طولانی است که همیشه باید در حال بررسی و بروزرسانی باشد تا احتمال نفوذ، هک و از بین رفتن اطلاعات به حداقل ممکن خود برسد.
چنانچه شما هم تجربهای در این زمینه دارید و یا اینکه فکر میکنید مطلبی از قلم افتاده است، میتوانید در قسمت نظرات مطرح کنید.