آموزش ساخت چک لیست برنامه نویسی امن
در این مقاله میخوانید
برای کدنویسی امن چارهای جز رعایت استانداردهای برنامهنویسی نداریم. هرچه در دنیای کدنویسی به پیش میرویم، همپای پیشرفت و پیچیدگی برنامهها، آسیبپذیری و مقابله با آن هم پیشرفتهتر میشود. بهعنوان برنامهنویس باید بتوانیم علاوهبر پیشبرد توسعه با سرعت منطقی، امنیت برنامهها را تاحدممکن افزایش دهیم؛ چراکه با کوچکترین خطا یا نادیدهگرفتن کمترین جزئیات، ممکن است خسارت سنگینی به سازمان وارد شود.
یکی از مشکلات جدی در حین کار بیتوجهی به بعضی از نکات امنیتی هنگام کدنویسی است. وقتی با حجم انبوهی از فاکتورها روبهرو میشویم، طبیعی است که بعضی از آنها فراموش شود. آمادهسازی چکلیست برنامهنویسی امن راهکاری مناسب و ساده برای رعایت این نکات است. در این مطلب، سه پیشنیاز اولیه کدنویسی امن را معرفی و ۷ آیتم حیاتی را مرور میکنیم تا بتوانید چکلیست اختصاصی خود را آماده کنید؛ پس تا پایان مقاله با ما همراه باشید.
قبل از شروع: امنیت، امنیت، امنیت
حتی با نادیدهگرفتن هزینههایی که پس از حملههای سایبری به پلتفرم تحمیل میشود، توجه به امنیت برنامه پیش از شروع برنامهنویسی بسیار کم هزینهتر از زمانی است که برنامه بهطورکامل نوشته شود. پس عقل سلیم حکم میکند از همان ابتدا با بررسی همه جوانب، مسیری را برای بهبود عملکرد امنیتی برنامه خود در نظر بگیریم.
براساس گزارش imperva، فقط در در ژانویه۲۰۲۱ بهاندازه کل سال ۲۰۱۷ دادهها با حملههای گوناگون مواجه شدند. باوجوداین، هنوزهم بسیاری از سازمانها و شرکتها سرعت توسعه را به امنیت ترجیح میدهند. دراینمیان، خبر خوش این است که امروزه این دو مقوله را میتوان درکنارهم پیش برد. استانداردهای برنامهنویسی این قابلیت را دارند که بدون جلوگیری از سرعت توسعه، بتوانیم همزمان امنیت را در برنامهنویسی لحاظ کنیم. بههمیندلیل، امروزه امنیت سایبری درکنار سرعت زیاد، به یکی از خواستههای اصلی سازمانها و شرکتها تبدیل شده است.
برنامهنویسی امن
استانداردهای برنامه نویسی امن چیست؟
به مجموعهای از دستورالعملها و قانونهایی که سازمانها برای کاهش آسیبپذیری و افزایش امنیت حین توسعه استفاده میکنند، استانداردهای برنامهنویسی امن میگویند. ناگفته نماند این قوانین در هر سازمانی ممکن است متفاوت تنظیم شود. برای مثال، درگاههای پرداخت باید الزامات امنیتی PCI را رعایت کنند.
باتوجهبه حملههای روزانه بدافزارها، بهتر است درکنار رعایت استانداردهای برنامهنویسی، از پایگاههای دادهای استفاده کنید که بهطورمرتب آسیبپذیریهای جدید را شناسایی میکنند. ازجمله این پایگاههای داده عبارتاند از:
برای آشنایی با زبان پایتون و آموزش نصب آن روی سیستمعاملهای مختلف مقاله زیر را بخوانید.
چرا کد نویسی امن مهم است؟
همانطورکه هنگام مجهزکردن سازمانها و شرکتها رعایت نکات امنیتی مانند نصب دوربین و دزدگیر و استخدام نگهبان مهم است، توجه به امنیت توسعه نرمافزاری نیز اهمیت فراوانی دارد. هرچقدر سازمانها با اطلاعات حساستری در ارتباط باشند، اهمیت این فرایند بیشتر میشود. فقط کافی است یک بار بدافزارها موفق شوند به داخل پلتفرم شرکت یا سازمانی نفوذ کنند تا به اعتبار و اعتماد آنها آسیب بزنند. گاهی اوقات، هزینه این حملهها برای هر سازمانی بهقدری زیاد است که احتمال دارد آن را تا مرز تعطیلشدن پیش ببرد. بههمیندلیل، سازمانها هزینه زیادی صرف امنیت سایبری خود میکنند.
اهمیت کد نویسی امن چیست؟
سه پیش نیاز اصلی کد نویسی امن
قبل از تهیه چکلیست برنامهنویسی امن، بهتر است با سه پیشنیاز اصلی آن آشنا شوید:
- آگاهی توسعهدهندگان
- استفاده از فرایندهای نوین
- ابزارهای امنیتی مناسب
آگاهی توسعهدهندگان
مهمترین نکته درباره رعایت کدنویسی امن، افزایش آگاهی درباره اهمیت امنیت برای همه افرادی است که بهنحوی با توسعه و برنامهنویسی سروکار دارند. وقتی اهمیت امنیت سایبری در سازمان مدنظر قرار گیرد، از همان اولین مراحل شروع برنامهنویسی، برنامهریزی برای رعایت استانداردهای امنیتی صورت خواهد گرفت. استفاده از متخصصان امنیت که جزئی از تیم توسعهدهندگان هستند، میتواند گامی مفید در مسیر این هدف باشد.
Vite یکی از ابزارهای جدیدی است که میتواند جایگزین Create React شود. برای آموزش استفاده از آن با ما همراه باشید.
استفاده از فرایندهای نوین
درکنار افزایش آگاهی، سازمانها باید چرخه حیات توسعه نرمافزار امن (SSDLC) را اجرایی کنند. این چرخه انجام تمام اقدامات امنیتی طی فرایند تولید نرمافراز از طراحی و اجرا تا نگهداری را شامل میشود. با استفاده از این راهکار از همان ابتدا میتوان از آسیبپذیری نرمافزارها جلوگیری کرد.
با اینکه بررسی امنیت بهصورت دستی همیشه انجام میشود، بهتر است تاحدممکن از سیستمهای خودکار هم استفاده شود. ابزارهای تجزیهوتحلیل نرمافزار (SCA) میتوانند با اتصال به پایگاههای داده آنلاین که آسیبپذیریها را روزانه منتشر میکنند، بهطورخودکار امنیت نرمافزار را تأمین کنند تا برنامه دربرابر جدیدترین تهدیدهای بهوجودآمده مصون باشد.
ابزارهای امنیتی مناسب
متخصصان امنیت نباید توسعهدهندگان را به استفاده از ابزارهایی مجبور کنند که در بلندمدت باعث کُندی روند اجرای پروژهها شود. آنان باید با انتخاب دقیق ابزارهای مناسب، به تیم توسعهدهنده کمک کنند. اغلب اوقات، توسعهدهندگان به استفاده از ابزارهایی تمایل دارند که جلوِ سرعت کار را نمیگیرند و تلاش مضاعفی در مسیر توسعه ایجاد نمیکنند. بنابراین با انتخاب ابزار مناسب، درصد زیادی از امنیت در مسیر توسعه را میتوان ایجاد کرد.
پیشنیازهای اصلی برنامهنویسی امن
چک لیست برنامه نویسی امن چطور به ما کمک میکند؟
برنامه نویسی کار پیچیده و سختی است. شما بهعنوان توسعهدهنده باید ابعاد مختلفی را هنگام برنامهنویسی رعایت کنید. بنابراین، تهیه چکلیست به شما کمک میکند که با کمترین خطا و بیشترین دقت کارتان را پیش ببرید.
باتوجهبه هدف نهایی هر برنامه، شما باید مسائل امنیتی را نیز با درجههای مختلف در نظر بگیرید. گاهی رعایت چندلایهبودن سپرهای امنیتی مهمتر از اعتبارسنجی ساختار است؛ بنابراین، بهتر است باتوجهبه پروژههایتان، چکلیست اختصاصی برای خودتان تهیه کنید. برای نمونه، وبسایت گیت هاب مدلی برای چکلیست برنامهنویسی امن آماده کرده است که میتوانید از آن برای کارهای خود الگو بگیرید:
هفت آیتم ضروری آمادهسازی چک لیست
حالا که مراحل اولیه را طی کردیم، بهتر است با تهیه چکلیست سعی کنیم در طول فرایند برنامه نویسی تاحدممکن نکات امنیتی را رعایت کنیم. آیتمهای مهم در آمادهسازی چکلیست ازاینقرارند:
۱. کنترل ورود داده
- اعتبارسنجی را متمرکز کنید.
- فقط به اعتبارسنجی از سمت کاربر، اعتماد نکنید.
- مراقب مشکلات متعارفسازی باشید (Canonicalization).
- ورودیها را محدود و براساس آیتمهای مختلف بررسی کنید.
۲. اهمیت احراز هویت
- از رمزهای قوی استفاده کنید.
- رمزهایی با تاریخ انقضا تعیین کنید.
- اعتبارنامهها را ذخیره نکنید و از سیستم رمزگذاری Hash یکطرفه استفاده کنید.
- برای محافظت از توکنهای احراز هویت، کانالهای ارتباطی را رمزگذاری کنید.
- کوکیهای احراز هویت را فقط ازطریق پروتکل HTTPS انتقال دهید.
آیتمهای ضروری برنامهنویسی امن
۳. مجوزها (اختیارات)
- از حساب کاربری با کمترین سطح دسترسی استفاده کنید.
- به قوانین سطح دسترسی توجه کنید.
- میزان دسترسی کاربران به منابع را محدود کنید.
- از پروتکل OAuth 2.0 برای احراز هویت و تعیین اختیارات کاربر استفاده کنید.
- اعتبارسنجی API را انجام دهید.
- از روشهای مجاز «فهرست سفید» استفاده کنید.
- از سطوح دسترسی و منابع حساس محافظت کنید.
- از جعل درخواست میانوبگاهی محافظت کنید (CSRF).
۴. مدیریت سشن
- برای سرور شناسه سشن ایجاد کنید.
- سشن را با Logoff ببندید.
- برای احراز هویت مجدد سشنی جدید ایجاد کنید.
- کوکیها را ازطریق پروتکل TLS ایمن کنید.
۵. رمزنگاری
- موقع انتقال و ذخیره دادهها و یکپارچگی پیام از رمزنگاری استفاده کنید.
- بهجای آنکه خودتان اقدامی کنید، از فیچیرهای تستشده استفاده کنید.
- از الگوریتم و Key Size مناسب استفاده کنید.
- از پروتکل DPAPI بهجای مدیریت کلید استفاده کنید.
- کلیدها را در جای مخصوص و محدودی ذخیره کنید.
۶. ثبت و ضبط فعالیتها
- فعالیتهای مخرب را شناسایی کنید.
- فرق ترافیک ارگانیک و حمله به سرور را بدانید.
- فعالیت تمام سطوح برنامه را ثبت و ضبط کنید.
- به فایلهای لاگ دسترسی ایمن داشته باشید.
- از فایلهای لاگ بهطورمنظم بکآپ بگیرید و تحلیل کنید.
۷. کدگذاری خارجی
- اعتبارسنجیهای ورودی (XML ،JSON و…) را اجرا کنید.
- پرسوجوها را پارامتریک کنید (Parameterized Query).
- اعتبارسنجی ساختار را اجرا کنید (Schema Validation).
۶ خطر امنیتی API که باید به آنها توجه کنیم در مقاله زیر آمده است، آن را از دست ندهید.
اینها برخی از نکات مهمی بود که حین تهیه چکلیست برنامهنویس امن باید مدنظر قرار دهید؛ ولی تنها به این نکات اکتفا نکنید و سعی کنید چکلیستی مناسب با پروژه خودتان آماده کنید.
ساخت چک لیست برنامهنویسی امن
جمعبندی
توجه به استانداردهای برنامهنویسی و کدنویسی امن مسیری است که نقطه پایان ندارد. هر برنامهای همواره باید پایش شود؛ بنابراین باید با آمادهسازی و بهروزرسانی چکلیست برنامهنویسی امن، مسیر توسعه و برنامه نویسی را پیش ببریم. در این مقاله با ارائه بعضی نکات پایه و پیشنهاد آیتمهایی برای ایجاد چکلیست، سعی کردیم اطلاعات لازم درباره تهیه چکلیست برنامهنویسی امن را برایتان گردآوری کنیم. اگر تاکنون از چکلیستی برای پیشبرد پروژههایتان استفاده کردهاید، نظر خود را درباره مزایا و معایب آن با ما بهاشتراک بگذارید.
سؤالات متداول
۱. چک لیست برنامه نویسی امن چیست؟
چک لیست برنامه نویسی امن شامل کنترل ورود دادهها، احراز هویت، مجوزها، مدیریت سشن، رمزنگاری، ثبت و ضبط فعالیتها و کدگذاری خارجی است.
۲. استانداردهای برنامه نویسی چیست؟
به مجموعهای از قوانین و دستورالعملها و تکنیکها میگویند که موجب تولید کدهایی مطمئن و کارا و کمخطا میشود.
۳. چرا کد نویسی امن مهم است؟
کد نویسی امن روشی است که بهمنظور جلوگیری از آسیبپذیریهای برنامه اجرا میشود. با پیروی از این استاندارد، میتوان بسیاری از آسیبپذیریها را قبل از اجرای برنامه پیدا و رفع کرد.