ایده اصلی

برای امن بودن یک محصول، نصب یک بسته کافی نیست. باید روشن باشد چه کسی به کدام داده دسترسی دارد، ورودی‌ها چگونه بررسی می‌شوند و اگر انتشار یا سرور دچار مشکل شد، چطور می‌توان سرویس را برگرداند.

01

اول مسیر داده و دسترسی را بشناسید

قبل از انتخاب ابزار امنیتی، مسیرهای ورود داده و تغییر دسترسی را روی کاغذ بیاورید: مرورگر به برنامه، کاربر مهمان به حساب واردشده، برنامه به فضای ذخیره‌سازی و صف به پردازش پس‌زمینه. برای هر مسیر مشخص کنید چه داده‌ای وارد می‌شود، چه کسی اجازه انجام کار را دارد و نتیجه کجا ثبت می‌شود.

این کار سؤال مبهم «سایت امن است؟» را به چند بررسی مشخص تبدیل می‌کند. آیا مشتری می‌تواند فاکتور فرد دیگری را باز کند؟ آیا پیام جعلی سرویس پرداخت می‌تواند وضعیت سفارش را تغییر دهد؟ آیا فایل ارسالی کاربر امکان اجرای کد در مرورگر مدیر را دارد؟ هر پاسخ باید با بررسی یا آزمون پشتیبانی شود.

02

ورود به حساب با اجازه انجام کار فرق دارد

اینکه کاربر با موفقیت وارد حساب شده، به او اجازه هر کاری نمی‌دهد. در Laravel، قواعد Policy و Gate باید روی سرور مالکیت داده، نقش کاربر، سازمان مربوط و وضعیت رکورد را بررسی کنند. پنهان کردن دکمه در صفحه برای تجربه کاربری مفید است، اما جای کنترل دسترسی را نمی‌گیرد.

برای کارهای حساس، تأیید دوباره هویت، محدودیت تعداد درخواست و ثبت سابقه فعالیت لازم است. بازیابی حساب هم باید به اندازه ورود جدی گرفته شود: لینک‌ها زمان اعتبار محدود داشته باشند، استفاده دوباره از لینک قدیمی ممکن نباشد و پاسخ برنامه بی‌دلیل وجود حساب یک فرد را افشا نکند.

03

هر ورودی را پیش از استفاده بررسی کنید

اعتبارسنجی فقط بررسی خالی نبودن یک کادر نیست. نوع، حجم، محدوده مقدار و تناسب داده با کاری که قرار است انجام شود هم مهم‌اند. برای فایل، نام امن تولید کنید، نوع واقعی را روی سرور بررسی کنید و آن را در مسیری نگه دارید که قابل اجرا نباشد. پسوندی که مرورگر می‌فرستد، به‌تنهایی معیار قابل اعتمادی نیست.

پیام سرویس‌های بیرونی، فایل‌های واردشده و کارهای پس‌زمینه هم ورودی محسوب می‌شوند. پیش از تغییر داده، امضای پیام را بررسی کنید. پردازش تکراری یک پیام نباید دوباره همان اثر را ایجاد کند؛ مثلاً یک پرداخت را دو بار ثبت کند. تعداد تلاش مجدد را محدود کنید و برای پیگیری خطا، شناسه رخداد نگه دارید؛ نه رمز و اطلاعات محرمانه.

04

تنظیمات سرور هم بخشی از محصول است

رمزها و کلیدهای سرویس باید در تنظیمات امن همان محیط نگهداری شوند. جای آن‌ها مخزن کد، فایل خروجی، گزارش خطا یا جاوااسکریپتی که به مرورگر می‌رسد نیست. در نسخه عمومی، نمایش جزئیات خطا را خاموش کنید، مجوز فایل‌ها را محدود نگه دارید و اتصال امن و روند مشخصی برای به‌روزرسانی وابستگی‌ها داشته باشید.

تا وقتی یک نسخه پشتیبان را بازیابی نکرده‌اید، از قابل استفاده بودنش مطمئن نیستید. بررسی کنید پایگاه داده، فایل‌های کاربران و تنظیمات لازم با هم قابل بازگردانی باشند. پایش سرویس هم باید فراتر از روشن بودن سرور برود: ورودهای ناموفق، خطاهای دسترسی، صف‌های متوقف‌شده و قدیمی شدن نسخه پشتیبان، هرکدام معنای متفاوتی دارند.

05

پیش از انتشار، چند بررسی مشخص داشته باشید

بررسی پیش از انتشار باید کوتاه و قابل تکرار باشد، اما خطای واقعی را هم پیدا کند. آزمون دسترسی نقش‌ها، بررسی وابستگی‌ها، تغییرات پایگاه داده و نبود اطلاعات محرمانه در خروجی را تا حد ممکن خودکار کنید. سپس از تازگی نسخه پشتیبان، امکان برگشت به نسخه قبلی و عملکرد مسیرهای حساس روی سایت منتشرشده مطمئن شوید.

  • دسترسی نقش‌ها و مالکیت داده روی سرور بررسی شده است.
  • فایل‌های ارسالی محدود، بررسی‌شده و غیرقابل اجرا هستند.
  • رمز و کلید سرویس در کد یا گزارش‌ها قرار ندارد.
  • بازیابی نسخه پشتیبان، بازگشت نسخه و مسیرهای اصلی بررسی شده‌اند.