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

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

۱-اعتبارسنجی تمامی ورودی‌ها

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

۲-به هشدارهای کامپایلی توجه ویژه داشته باشید

کدتون با حساسیت بالای کامپایلر نسبت به متغیرها، اجرا کنید و تلاش کنید تا با اعمال تغییرات مناسب، این هشدارها را حذف و یا آگاهانه محدود کنید. یه نکته دیگه هم این که حتما از ابزارهای تحلیل ثابت و پویا (static and dynamic analysis tools) برای کشف نواقص امنیتی بیشتر استفاده کنید.

۳-معماری و طراحی را براساس خط‌مشی‌های امنیتی انجام دهید

نرم‌افزارتون برای اجرای خط‌مشی‌های امنیتی طراحی و برپایه معماری امن، پیاده‌سازی کنید. مثلا اگر سیستم نیاز داره که با مجوزهای مختلف در زمان‌های مختلف کار کنه، ساختاری تفکیکی را برای ایجاد زیرسیستم‌های مشخص و مجزا با سطوح دسترسی خاص در ذهن داشته باشید. به عنوان نمونه، در سیمفونی میتونید application‌‌های گوناگونی داشته باشید و Frontend پروژه رو از Backend کلا جدا کنید و سیاست‌های متعددی رو در هریک از اونها حکم‌فرما کنید.

۴-ساده نگه دارید

بهترین سیاست برای افزایش سطح امنیتی نرم‌افزار یعنی «بوسه (kiss)». همواره طراحی رو در ساده‌ترین حالت نگه دارید. پیچیدگی طراحی و کد احتمال وجود نقص و خطا رو در پیاده‌سازی، پیکربندی و کاربری افزایش می‌ده. تازه، با افزایش پیچیدگی، تلاش بیشتری هم برای رسیدن به یه وضعیت مطلوب و حصول اطمینان از امنیت نسبی مورد قبول مورد نیازه.

۵-به صورت پیش‌فرض رد کنید

دسترسی‌ها رو براساس مجوزهای داشته بنا کنید تا ببینید چه مجوزهایی رو کاربر نداره. یعنی به صورت پیش‌فرض «دسترسی مجاز نمی‌باشد» و شرایط شناسایی براساس داشته‌ها است تا نداشته‌ها. این تمرین خوبیه که همه جا می‌تونه کاربرد داشته باشه. همواره یه فهرست سفید داشته باشید تا فقط و فقط اونها رو مجاز بدونید نه این که یه فهرست سیاه تهیه کرده باشید و براساس اون کاری رو انجام بدید.

۶-پایبند به اصل حداقل مجوز باشید

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

۷-محافظت و پاک‌سازی داده‌های ارسالی به سایر سیستم‌ها

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

۸-دفاع عمقی را تمرین کنید

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

۹-از روش‌های تضمین کیفیت کارا استفاده کنید

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

۱۰-از استانداردهای برنامه‌نویسی امن پیروی کنید

تلاش کنید تا از استانداردهای کدنویسی امن تبعیت کنید و به‌روش‌های (همون best practice) امنیتی زبان و بستره مورد استفاده رو به کار ببندید. مثلا نیازمندی‌های امنیتی رو تعریف کنید و یه مدل تهدید برای نرم‌افزار آماده کنید.

همیشه راهی برای دور زدن محدودیتها وجود داره

اینم برای خوره‌های فیسبوک: اگه نکته رو گرفتی بزن لایک رو

یادتون باشه که هرگز امنیت ۱۰۰% نیست و همیشه راهی برای دور زدن محدودیت‌ها وجود داره