فایل آپلود امنیت در webapp – نمای کلی از راه اندازی

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

  1. البته کاربران ثبت نام می توانند آپلود کنند، اما من می دانم که این چیزی نیست.
  2. سایت توسط nginx در معرض قرار گرفته است.
  3. دستگاهی که سرور میزبان میزبانی می شود تنها اتصالات ورودی را از دستگاه nginx پذیرفته است.
  4. لینک آپلود تصویر (دستورالعمل nginx) سرعت محدود است (به طریقی که سخاوتمندانه برای یک کاربرپرداخت مشروع کاربر حساب می شود).
  5. وب سرور تنها قالب های تصویر jpg / png / tiff / webp را می پذیرد (نوع MIME را با استفاده از کتابخانه جادویی به دست می آورد).
  6. هر دو nginx و وب سرور محدودیتی در اندازه فایل پذیرفته شده دارند.
  7. تمام فایل های آپلود شده با استفاده از یک نام فایل که هش محتویات ذخیره می شود ذخیره می شود.
  8. به طور پیش فرض، آنها تنها با مجوز RW ذخیره میشوند، نه rwx.
  9. تصاویر در همان سیستم به عنوان وب سرور ذخیره می شوند.
  10. آنها به طور مستقیم به مکان نهایی ذخیره می شوند (هیچ موقعیت مکانی متوسط ​​وجود ندارد) اما تصاویر برای مشاهده تا زمانی که یک ستون پایگاه داده خاص به روز نمی شود قابل دسترسی نیست (نگاه کنید به نقطه بعدی)
  11. فایل های تازه آپلود شده (و هر فایل مخرب به یک دایرکتوری متفاوتی منتقل می شود که سرورها آن را ندارند) و سپس ستون پایگاه داده فوق به روز می شود تا فایل ها برای مشاهده در دسترس باشد.
  12. در نهایت، تعداد کمی از سر و صدا تصادفی به هر تصویر اضافه شده با انجام کاری شبیه magick image.jpg -valuate اضافه کردن 0.1 image.jpg

چه بردارها من از دست رفته است؟ هدف این است که در مقابل یک بازیگر دولتی محافظت نکنیم، بلکه حفاظت معقول را در برابر متخصص (یا حتی تا حدودی ماهر) مضر مضر داشته باشیم.