مبانی بخش امنیت

چند قانون بسیار پایه‌ای هست که باید برای توسعه کد امن رعایت کنید.

قانون شماره 1: تمام ورودی‌های کاربر خطرناک هستند

هر ورودی که از کاربر دریافت می‌کنید را به عنوان ورودی خطرناک در نظر بگیرید. به آن‌ها نباید اعتماد کرد و همیشه باید در هنگام دریافت فیلتر و/یا اعتبارسنجی شوند و در هنگام خروجی نیز نیاز به فراردهی (Escape) دارند.

لطفاً توجه داشته باشید این فقط به ورودی‌های واضح کاربر مثل POST یا GET محدود نیست، بلکه شامل منابع دیگری می‌شود که کاربر کنترل آن‌ها را دارد مانند:

- کوکی‌ها

- ابرمتغیر REQUEST

- بخش‌های عمده ابرمتغیر SERVER که حاوی ورودی‌های تحت کنترل کاربر مثل URL، دامنه یا متد HTTP است

- هدرهای درخواست HTTP

قانون شماره 2: امنیت سمت کلاینت، امنیت نیست

هر چیزی که در سمت کلاینت (مرورگر) اتفاق می‌افتد، تحت کنترل کاربر است. بنابراین هر تدبیر امنیتی که تنها در سمت کلاینت پیاده‌سازی شود، هیچ امنیت واقعی ندارد چون کاربر می‌تواند آن را غیرفعال یا دستکاری کند.

این اصل بیشتر در موارد زیر صدق می‌کند:

- اعتبارسنجی فرم: اعتبارسنجی سمت مرورگر فقط یک ویژگی تجربه کاربری است (چون بدون بارگذاری مجدد صفحه بازخورد فوری می‌دهد) و جایگزین اعتبارسنجی سمت سرور نیست.

- بررسی دسترسی‌ها: اگر مثلاً رشته محرمانه‌ای را در مرورگر نمایش دهید اما آن را با display:none مخفی کنید، کاربر هنوز می‌تواند به سادگی آن را مشاهده کند.

- محدودیت نرخ درخواست‌ها: اگر محدودیت تعداد درخواست‌ها فقط با روش‌های سمت کلاینت مثل غیرفعال کردن دکمه با JS اعمال شود، مراقبت امنیتی واقعی نیست.

قانون شماره 3: رمزنگاری را خودتان انجام ندهید

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

قانون شماره 4: امنیت از طریق ابهام را دنبال نکنید

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

قانون شماره 5: سطح حمله خود را کاهش دهید

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

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