چکیده مقاله
امنیت بعد از هک گرانتر است. این چکلیست حداقلی است که قبل از تحویل سامانههای KGSM اجرا میشود.
امنیت Laravel با افزونه شعاری تمام نمیشود. هویت، نقش، ورودی، فایل، اسرار استقرار و پشتیبان باید قبل از انتشار بسته شوند. این چکلیست حداقلی است که تیم KGSM روی سامانههای سازمانی با داده کاربر و سند مالی اجرا میکند — نه یک امتیاز بازاریابی بعد از هک.
این راهنما با عنوان «چکلیست امنیت Laravel برای سامانه سازمانی» از تجربه تحویل پروژههای KGSM نوشته شده: محدوده نسخه اول، انتشار مرحلهای، و پشتیبانی بعد از تحویل.
مخاطب، ریسک و روش KGSM
مسئول فناوری یا مدیر سامانهای که Laravel سازمانی را قبل از انتشار باید از نظر امنیت ببندد
نفوذ بعد از تحویل یعنی نشت داده مالی، توقف عملیات و بازسازی گرانتر از پیشگیری.
KGSM این چکلیست را قبل از تحویل سامانههای سازمانی اجرا میکند و پشتیبانی بهروزرسانی را در قرارداد میگذارد.
هویت، نشست و نقش
ورود باید روی HTTPS باشد، کوکی نشست را HttpOnly و Secure بگذارید، و نام کاربری admin یا ایمیل قابل حدس مدیر را پیشفرض نکنید. احراز هویت دو مرحلهای برای نقشهای مالی و ادمین کل ارزش عملی دارد، نه فقط برای ویترین. قفل حساب بعد از چند تلاش ناموفق و محدودیت نرخ روی /login جلوی آزمون کور را میگیرد. «همه ادمین» در سامانه سازمانی یعنی هر کارآموز میتواند خروجی حقوق بگیرد. نقش را با مجوز مشخص بسازید: مشاهده، ویرایش، حذف، تصدیر. در Laravel، mass assignment را با $fillable بسته نگه دارید و مسیرهای مدیریت را از حدس URL خارج کنید. KGSM قبل از تحویل یک کاربر با نقش حسابدار میسازد و سعی میکند به منوی حقوق برود؛ اگر برسد، مجوز هنوز باز است. جزئیات پیادهسازی بخشی از برنامهنویسی وب است نه کار بعد از انتشار.
debug را در تولید خاموش کنید؛ مسیر فایل نقشه نفوذ است. پنل با APP_DEBUG روشن بعد از یک خطای اعتبارسنجی مسیر کنترلر را به اینترنت نشان داد.
ورودی، CSRF، آپلود و XSS
هر فرم سازمانی باید CSRF داشته باشد؛ API توکندار را جدا از فرم کوکی طراحی کنید تا اشتباه میکس پیش نیاید. اعتبارسنجی را در Form Request بگذارید، نه فقط در فرانت. خروجی را در Blade با escape پیشفرض نگه دارید و {!! !!} را فقط برای HTML کنترلشده مجاز کنید. آپلود فایل نوع و حجم را محدود کند، نام را تصادفی ذخیره کند، و اجرا را از پوشه عمومی بردارد؛ چسباندن ورودی به رشته خام در گزارشساز سفارشی رایجترین سوراخ داخلی است. محدودیت نرخ روی فرم تماس و بازیابی رمز، اسپم و تخلیه صندوق را کم میکند. اگر صفحه عمومی دارید، سئو فنی هم HTTPS و هدرهای امنیتی را جدی میگیرد؛ این دو پروژه جدا نیستند. KGSM در تست تحویل یک فایل غیرمجاز و یک رشته اسکریپت را به فرمها میفرستد تا چکلیست روی کاغذ نماند.
کارآموز با نقش ادمین خروجی اکسل حقوق را دانلود کرد چون مجوز جدا نبود. نقش حسابدار را جدا از ادمین کل بسازید و با همان حساب تست کنید.
اسرار، استقرار و وابستگی
فایل .env هرگز در مخزن عمومی یا پوشه قابل دانلود نباشد. کلید اپ، رمز دیتابیس و توکن درگاه را در محیط تولید جدا از Staging نگه دارید. debug را در تولید خاموش کنید؛ صفحه خطا با مسیر فایل برای مهاجم نقشه است. بهروزرسانی Laravel و بسته composer را برنامه ماهانه کنید، نه وقتی خبر نفوذ منتشر شد. وابستگی رهاشده را حذف کنید؛ صف و worker را با کاربر جدا اجرا کنید تا نشت یک جاب کل وب را نگیرد. اگر چند سرور دارید، همگام بودن APP_KEY را کنترل کنید وگرنه نشست و رمزنگاری فیلد میشکند. KGSM دسترسی SSH و پنل هاست را به نام کارفرما تحویل میدهد؛ اسرار روی اکانت شخصی برنامهنویس یعنی با رفتن نفر، قفل عملیاتی میشوید. مسیر پشتیبانی بهروزرسانی را از تماس در قرارداد بخواهید.
آپلود را خارج از public اجراپذیر ذخیره کنید. آپلود تصویر، یک فایل PHP را در public گذاشت و سایت در یک شب از کار افتاد.
پشتیبان، لاگ و تمرین بازیابی
پشتیبان نگرفتن چون ماه اول آرام بود، کلاسیکترین دلیل از دست رفتن سند مالی است. نسخه دیتابیس و فایلهای پیوست باید زمانبندی داشته باشند، رمزگذاری شوند و حداقل یک نسخه خارج از سرور تولید بنشینند. بازیابی را روی Staging تمرین کنید؛ فایلی که باز نمیشود پشتیبان نیست. لاگ ورود ناموفق، تغییر نقش، تصدیر گزارش و حذف سند را نگه دارید تا اختلاف و نفوذ سند داشته باشند. تست نفوذ کامل همیشه لازم نیست؛ همین چکلیست با داده واقعی، بیشتر نفوذهای فرصتطلب را میبندد. اگر اتوماسیون داخلی هم روی همین اپ است، مرز اتوماسیون اداری را با نقش جدا کنید تا کارتابل منشی به خروجی حقوق نرسد. امنیت یک فاز جدا بعد از «زیبا شدن پنل» نیست؛ در هر دموی مرحلهای باید یکی از این بندها بسته شده باشد.
پشتیبان فقط روی همان دیسک بود؛ خرابی هارد هر دو را برد. بهروزرسانی composer را در تقویم نگهداری ماهانه بگذارید.
پشتیبان بدون تمرین بازیابی فقط حس امنیت است. توکن درگاه در مخزن گیت شخصی برنامهنویس ماند و بعد از رفتن او لو رفت.
فرم بازیابی رمز بدون محدودیت، صندوق ایمیل را با درخواستهای جعلی پر کرد. تغییر نقش و تصدیر گزارش را لاگ کنید.
.env و کلید درگاه را بین Staging و تولید یکی نگذارید. پنل با APP_DEBUG روشن بعد از یک خطای اعتبارسنجی مسیر کنترلر را به اینترنت نشان داد.
کارآموز با نقش ادمین خروجی اکسل حقوق را دانلود کرد چون مجوز جدا نبود. محدودیت نرخ را روی ورود و بازیابی رمز از روز اول فعال کنید.
چکلیست اجرا
- debug را در تولید خاموش کنید؛ مسیر فایل نقشه نفوذ است.
- نقش حسابدار را جدا از ادمین کل بسازید و با همان حساب تست کنید.
- آپلود را خارج از public اجراپذیر ذخیره کنید.
- بهروزرسانی composer را در تقویم نگهداری ماهانه بگذارید.
- پشتیبان بدون تمرین بازیابی فقط حس امنیت است.
- تغییر نقش و تصدیر گزارش را لاگ کنید.
- .env و کلید درگاه را بین Staging و تولید یکی نگذارید.
- محدودیت نرخ را روی ورود و بازیابی رمز از روز اول فعال کنید.
سناریوی واقعی 1
پنل با APP_DEBUG روشن بعد از یک خطای اعتبارسنجی مسیر کنترلر را به اینترنت نشان داد.
debug را در تولید خاموش کنید؛ مسیر فایل نقشه نفوذ است.
سناریوی واقعی 2
کارآموز با نقش ادمین خروجی اکسل حقوق را دانلود کرد چون مجوز جدا نبود.
نقش حسابدار را جدا از ادمین کل بسازید و با همان حساب تست کنید.
سناریوی واقعی 3
آپلود تصویر، یک فایل PHP را در public گذاشت و سایت در یک شب از کار افتاد.
آپلود را خارج از public اجراپذیر ذخیره کنید.
سناریوی واقعی 4
پشتیبان فقط روی همان دیسک بود؛ خرابی هارد هر دو را برد.
بهروزرسانی composer را در تقویم نگهداری ماهانه بگذارید.
سناریوی واقعی 5
توکن درگاه در مخزن گیت شخصی برنامهنویس ماند و بعد از رفتن او لو رفت.
پشتیبان بدون تمرین بازیابی فقط حس امنیت است.
سناریوی واقعی 6
فرم بازیابی رمز بدون محدودیت، صندوق ایمیل را با درخواستهای جعلی پر کرد.
تغییر نقش و تصدیر گزارش را لاگ کنید.
صفحات مرتبط KGSM
ادامه را در KGSM و خدمات سئو و بهینهسازی، برنامهنویسی و توسعه نرمافزار ببینید. مقالات مرتبط: امنیت سایت برای کسبوکار ایرانی: حداقلهای ضروری. برای برآورد محدوده نسخه اول از فرم تماس استفاده کنید.
وقتی این نکته به تیم زنده میرسد باید قانون اجرایی باشد نه اسلاید: debug را در تولید خاموش کنید؛ مسیر فایل نقشه نفوذ است. برایش مالک و تاریخ بازبینی بگذارید تا در اولین هفته شلوغ فراموش نشود.
وقتی این نکته به تیم زنده میرسد باید قانون اجرایی باشد نه اسلاید: نقش حسابدار را جدا از ادمین کل بسازید و با همان حساب تست کنید. برایش مالک و تاریخ بازبینی بگذارید تا در اولین هفته شلوغ فراموش نشود.
وقتی این نکته به تیم زنده میرسد باید قانون اجرایی باشد نه اسلاید: آپلود را خارج از public اجراپذیر ذخیره کنید. برایش مالک و تاریخ بازبینی بگذارید تا در اولین هفته شلوغ فراموش نشود.
وقتی این نکته به تیم زنده میرسد باید قانون اجرایی باشد نه اسلاید: بهروزرسانی composer را در تقویم نگهداری ماهانه بگذارید. برایش مالک و تاریخ بازبینی بگذارید تا در اولین هفته شلوغ فراموش نشود.
وقتی این نکته به تیم زنده میرسد باید قانون اجرایی باشد نه اسلاید: پشتیبان بدون تمرین بازیابی فقط حس امنیت است. برایش مالک و تاریخ بازبینی بگذارید تا در اولین هفته شلوغ فراموش نشود.
وقتی این نکته به تیم زنده میرسد باید قانون اجرایی باشد نه اسلاید: تغییر نقش و تصدیر گزارش را لاگ کنید. برایش مالک و تاریخ بازبینی بگذارید تا در اولین هفته شلوغ فراموش نشود.
وقتی این نکته به تیم زنده میرسد باید قانون اجرایی باشد نه اسلاید: .env و کلید درگاه را بین Staging و تولید یکی نگذارید. برایش مالک و تاریخ بازبینی بگذارید تا در اولین هفته شلوغ فراموش نشود.
وقتی این نکته به تیم زنده میرسد باید قانون اجرایی باشد نه اسلاید: محدودیت نرخ را روی ورود و بازیابی رمز از روز اول فعال کنید. برایش مالک و تاریخ بازبینی بگذارید تا در اولین هفته شلوغ فراموش نشود.
وقتی این نکته به تیم زنده میرسد باید قانون اجرایی باشد نه اسلاید: پنل با APP_DEBUG روشن بعد از یک خطای اعتبارسنجی مسیر کنترلر را به اینترنت نشان داد. برایش مالک و تاریخ بازبینی بگذارید تا در اولین هفته شلوغ فراموش نشود.
سوالات متداول
حداقل امنیت Laravel قبل از انتشار چیست؟ +
آیا تست نفوذ لازم است؟ +
بهروزرسانی را چه کسی انجام میدهد؟ +
وردپرس در همین سرور باشد خطرناک است؟ +
بعد از نفوذ چه کنیم؟ +
کلمات کلیدی
خدمات مرتبط KGSM