درست مانند هر زبان و تکنولوژی برنامهنویسی دیگری، Node.js نیز مشکلات و مسائل امنیتی مربوط به خود را دارد. البته خود Node.js به شکل بی نظیری امن است اما مشکل اصلی با Node.js زمانی شروع میشود که بخواهیم با کتابخانههای آن کار کنیم. در یک آمار موثق حدود ۱۴ درصد پکیجهای موجود در NPM به شکل مستقیم آسیبپذیر بوده و مشکلات امنیتی دارند. در این بین نیز ۵۴ درصدشان مشکلاتی داشته که نیاز به بررسی مستقیم دارند.
حال شاید از خودتان بپرسید که NPM چیست و چه رابطهای با مسئله امنیت دارد؟
NPM سیستم مدیریت بسته Node.js است که حاوی هزاران پکیج برنامهنویسی متن باز براساس زبان برنامهنویسی جاوااسکریپت است. وجود اکوسیستم ثروتمند باعث شده تا برنامهنویسان جاوااسکریپت بتوانند سرعت و کارایی بالایی داشته باشند. مشکلی که NPM دارد آن است که حاوی پکیجهای فراوانیست که تقریبا تمرکز یا بررسی امنیتی روی آنها وجود نداشته و این موارد نیز خود به عنوان مستقلات پروژههای دیگر استفاده میشود. این روند میتواند بسیار آسیب زدنی باشد.
از آنجایی که پکیجها به صورت متن باز و توسط افراد مختلفی نوشته میشوند، دارای کیفیتهای متغیری هستند. درست است که اغلب آنها کار را به درستی انجام میدهند اما امکان وجود حفرههای امنیتی در آنها را نباید نادیده گرفت.
رویکردهایی برای حل مشکلات امنیتی
از آنجایی که راههای نفوذ به یک پروژه نرمافزاریی تحت وب بسیار زیاد است، ما در این مقاله از وبسایت راکت قصد داریم ۱۰ روش مؤثر برای حل این مشکلات را به شما ارائه دهیم.
۱. جلوگیری از حملات XSS با اعتبارسنجی درست ورودیها
XSS یا Cross-Site Scripting به هکرها این اجازه را میدهد تا بتوانند از طریق کلاینت-ساید به وبسایت شما اسکریپتهایی را تزریق کنند. این موضوع میتواند باعث لو رفتن دادهها و از بین بردن آنها شود. دلیل اصلی موفقیت آمیز بودن چنین حملاتی اعتبارسنجی نکردن از ورودیهای وبسایت است.
سعی کنید برای تمام ورودیهای خود حالتهای پیشبینیپذیری در نظر بگیرید. برای مثال تنها نتایج مربوط به یک فرم جستجو در حالت اول پیدا کردن محصول یا نوشته مورد نظر و در حالت دوم صفحه ۴۰۴ است. نباید به هکرها اجازه دهید که کدهای جاوااسکریپتی را از طریق کلاینت-ساید به وبسایتتان تزریق کنند.
پروژههایی مانند XSS-filters یا Validatorjs نیز میتواند در حل این مشکل به شما کمک بکند.
۲. پیشگیری از انتشار دادههای زیاد
در فرایند ارسال داده از سمت سرور به سمت کلاینت برخی از برنامهنویسان حجم عظیمی از دادهها ارسال میکنند و در قسمت کلاینت دادههای مربوط را به حالت نمایش درآورده و بقیه را مخفی میکنند. حقیقتا برای یک هکر پیدا کردن آن قسمت مخفی از دادهها میتواند کار بسیار آسانی باشد.
برای حل این مشکل همواره به یاد داشته باشید که تنها از قسمت مورد نیاز داده، استفاده کرده و بقیه مشخصات برای مثال یک Object را به قسمت کلاینت ارسال نکنید.
۳. از لینترهای امنیتی استفاده بکنید
فرایند لینتیگ و یا حل مشکل از آنجایی که به صورت خودکار انجام میشود همواره میتواند مواردی که از یاد بردهاید را به شما یادآوری بکند. از این رو استفاده از لینترهای امنیتی مانند eslint-plugin-security میتواند در ارتکاب شما به خطاهای امنیتی جلوگیری نماید.
۴. کنترل دسترسی روی بخشهای مختلف
روی قسمتهای مختلف وبسایتتان کنترلگر بررسی را در نظر بگیرید. منظور از این اصطلاح این است که هویت و میزان دسترسی کاربران را به خوبی تعریف کرده و اجازه ندهید هر کاربری به قسمت داشبورد وبسایتتان دسترسی داشته باشد. برای انجام چنین کاری حتی باید روی دسترسی به APIها نیز پیادهسازیهایی را انجام دهید. استفاده از تکنیکهای مربوط به JSON Web Token در این زمینه میتواند کاربردی باشد.
۵. عملیات Deserialization امن
اگر در جریان Serialization و Deserialization امنیت را جدی نگیرید مطمئنا با حملات CSRF مواجه خواهید شد. هر کدام از فریمورکها و تکنولوژیهای مبتنی بر وب مخصوصا خود Node.js تکنیکهایی برای پیشگیری از حملات CSRF در نظر گرفته که با استفاده کردن از آنها میتوانید از انجام چنین حملاتی پیشگیری کنید.
۶. مراقب HTTP Response Headerهایتان باشید
یکی از مشکلات بزرگی که میتواند باعث هک شدن وبسایتتان باشد فریمورک یا تکنولوژیست که روی HTTP Responseها تمرکز بالایی ندارد. برای مثال در نسخههای قدیمی فریمورک Express این مشکل بصورت جدی وجود داشته که البته در آخرین نسخهها این مشکل به شکل خوبی پیشگیری شده است.
اگر قصد دارید تا لایههای محافظتی بهتری را برای این مسئله در نظر بگیرید میتوانید از پکیج Helmet استفاده بکنید.
۷. بررسی مرتب ورودها
یکی از مسائلی که نه فقط در رابطه با Node.js بلکه در رابطه با هر شکلی از بالا بردن امنیت وبسایت انجام دهید، ایجاد یک سیستم برای مانیتور و بررسی کردن ورودهاست. ایجاد چنین سیستمی میتواند به شما در دقیقتر شدن روی شیوه دسترسی به دادهها کمک کند.
۸. ایجاد سیستم احرازهویت قدرتمند
داشتن یک سیستم احرازهویت و اعتبارسنجی ضعیف بزرگترین و البته آسانترین فرصت برای هکرها در جهت انجام کارهایشان است. در هنگام ایجاد وبسایتتان مطمئن شوید که از سیستم قدرتمندی برای احزارهویت استفاده میکنید. در انجام این فرایند ابزارهایی مانند OAuth و Okta میتواند به خوبی به شما کمک کند.
۹. بررسی متناوب اپلیکیشن برای آسیبپذیریها
از آنجایی که شما در ایجاد یک پروژه مجبور خواهید بود که از کتابخانهها و فریمورکهای مختلف استفاده کنید، برای بررسی کردن تناوبی آنها زمان خاصی را در نظر بگیرید. برای اینکار نیاز است که هر از چند گاهی پکیجهای مورد استفادهتان را مطالعه کرده و از آخرین تغییراتی که در بروزرسانی آنها انجام میشود آگاه شوید.
۱۰. پروژه را رها نکنید
زمانی که پروژهتان را ایجاد و منتشر کردید نباید آن را با هر شکلی از امنیت که ایجاد کردهاید رها سازید. شما باید در بخشهای مختلف پروژه روز به روز سرک کشیده و مشکلات امنیتی احتمالی را بررسی کنید. از پیشفرضها خودداری کنید، سعی کنید تا جایی که میتوانید پکیجها را نیز شخصیسازی کنید.
در پایان
با وجود آنکه در سالهای اخیر توسعهدهندگان Node.js همواره تلاش کردهاند تا تکنولوژی بهتر و امنتری را ارائه دهند، اما باید در نظر داشته باشید که امنیت هیچگونه پایانی نداشته و همواره باید سعی کرد تا یک فریمورک یا پروژه را امنتر ساخت.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید