حالت نقشه‌ی فنی فعال است — تصمیم‌های طراحی این سایت را ببینید

امنیت از روز اول: حداقل‌هایی که هر محصول کوچک لازم دارد

امنیت قابلیتی نیست که بعداً اضافه شود. چند تصمیم ساده در ابتدای کار، مثل اعتبارسنجی ورودی، مدیریت درست رمز و کلید، کمترین دسترسی و سرتیترهای امنیتی، جلوی بیشتر حادثه‌های رایج را می‌گیرد.

«فعلاً کوچک‌ایم، کسی سراغ ما نمی‌آید.» این جمله را زیاد می‌شنوم. اما بیشتر حمله‌ها هدفمند نیستند؛ خودکارند. ربات‌ها اینترنت را برای ضعف‌های شناخته‌شده می‌گردند و برایشان فرقی ندارد سایت شما بزرگ است یا کوچک.

خبر خوب این است که بیشتر حادثه‌های رایج با چند تصمیم ساده در ابتدای کار قابل پیشگیری‌اند.

چرا «بعداً» جواب نمی‌دهد

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

بعضی تصمیم‌های امنیتی در ساختار سامانه‌اند: کجا هویت بررسی می‌شود، داده‌ی هر کاربر چطور جدا می‌شود، کلیدها کجا نگه داشته می‌شوند. این‌ها را نمی‌شود بعداً «اضافه» کرد.

حداقل‌های ضروری

۱. به هیچ ورودی اعتماد نکنید

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

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

۲. رمز عبور را درست نگه دارید

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

۳. کلیدها بیرون از کد

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

۴. کمترین دسترسی

هر بخش فقط به چیزی دسترسی داشته باشد که لازم دارد:

  • برنامه با کاربر محدود اجرا شود، نه مدیر سیستم.
  • پایگاه داده از اینترنت در دسترس نباشد.
  • هر سرویس، کلید جدا با دسترسی محدود داشته باشد.

۵. بررسی دسترسی در هر درخواست

یکی از رایج‌ترین ضعف‌ها در برنامه‌های وب این است: کاربر وارد شده، ولی با عوض کردن یک شناسه در نشانی، داده‌ی کاربر دیگری را می‌بیند. بررسی «این کاربر اجازه‌ی دیدن این مورد را دارد؟» باید در هر درخواست و در سرور انجام شود. در محصولات SaaS این همان بحث جداسازی مشتری‌ها است.

۶. سرتیترهای امنیتی

چند سرتیتر ساده، دسته‌ی بزرگی از حمله‌ها را می‌بندد:

  • سیاست امنیت محتوا (CSP): تعیین می‌کند چه اسکریپت‌هایی اجازه‌ی اجرا دارند.
  • اجبار اتصال امن.
  • جلوگیری از قاب‌بندی صفحه در سایت دیگر.

۷. محدودیت نرخ

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

۸. وابستگی‌ها را به‌روز نگه دارید

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

حریم خصوصی هم امنیت است

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

این سایت برای همین بدون کوکی ردیابی کار می‌کند و نشانی اینترنتی بازدیدکننده را فقط به شکل درهم‌شده نگه می‌دارد.

برای روز حادثه آماده باشید

هیچ سامانه‌ای کاملاً امن نیست. آمادگی یعنی:

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

محصولات هوش مصنوعی

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

چک‌لیست کوتاه پیش از انتشار

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

جمع‌بندی

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

مطلب مرتبط: بدهی فنی: چه زمانی آن را بپذیریم.

نویسنده

محمد علی اسلامی‌پور

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