چگونه بک‌اند Nodejs خود را امن کنیم؟

ترجمه و تالیف : مهدی عقیقی
تاریخ انتشار : 16 اسفند 98
خواندن در 3 دقیقه
دسته بندی ها : نود جی اس

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

مهم نیست که شما یک کسب و کار SaaS راه انداخته‌اید یا یک پلتفرم crowd-sourcing.مهم نیست که چه نوع اطلاعاتی جمع‌آوری می‌کنید.شما باید به امنیت پلتفرم‌تان توجه کنید. ما در این مقاله می‌خواهیم در مورد امنیت بک‌اند صحبت کنیم. و برای قدرت دادن به API‌مان از Nodejs و Express استفاده می‌کنیم.

Injection

یکی از معروف‌ترین حملات، SQL Injection می‌باشد. SQL Injection یک ترفند تزریق کد می‌باشد که امکان دارد پایگاه‌داده‌ی شما را نابود کند. هکر می‌تواند هر یک از کد‌های زیر را در دیتابیس شما اجرا کند.

' ; DROP TABLE customers; --

خط بالا جدول customers شما را کاملا پاک می‌کند.

' OR 1=1 --

این خط می‌تواند از طریق فیلد password استفاده بشود و به اطلاعات کاربر دسترسی پیدا کند.

پس چگونه می‌توانید بر حملات SQL Injection غلبه کنید؟ پیشنهاد می‌شود که در بک‌اند خود از یک ORM استفاده کنید، برای مثال Knex.js. به هر حال، توجه کنید که SQL Injection تنها تزریقی نیست که هکر‌ها می‌توانند استفاده کنند. Injection یا تزریق کردن کد در واقع به این معنا‌ست که هکر یک سری کد‌های بد را با استفاده از فرم‌های سایت، با کد‌های شما ترکیب کند. برای غلبه بر همه‌ی تزریق‌ها می‌توانید کار‌های زیر را انجام دهید.

  • اعتبار‌سنجی هر فیلد در دیتابیس
  • استفاده از Express Validator در controller های‌تان برای اعتبار‌سنجی هر فیلد
  • قبل از این که فرم‌ها را در بک‌اند اعتبار‌سنجی کنید، اول این کار را در فرانت‌اند کنید. مهم نیست که از React یا Vue یا Angular استفاده می‌کنید. همه‌ی این فریمورک‌ها راه‌حل‌های بسیار خوبی برای این قضیه دارند.

چک کردن کتابخانه‌های غیر رسمی

یادتان باشد که تمام کتابخانه‌های غیر رسمی اوپن‌سورس بوده و توسط برنامه‌نویس‌های دیگر توسعه داده شده‌اند. پس اگر شخصی یکی از کتابخانه‌ها را برای خراب‌کاری بعد از چند وقت ساخته باشد چه؟ پیشنهاد می‌شود که همه‌ی کتاب‌خانه‌ها را برای آسیب‌های احتمالی چک کنید. ما قبلا از یک package به نام NSP استفاده می‌کردیم اما بعدا این پکیج به خود NPM اضافه شد. می‌توانید از Synk هم استفاده کنید.

npm install -g snyk

بعد از نصب شما باید با اکانت synk خودتان لاگین کنید و تست کنید.

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

npm audit fix

این دستور بیش‌تر این مشکلات را حل می‌کند.

لاگ‌گیری

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

خوشبختانه، دو کتابخانه‌ی عالی برای انجام این کار در Nodejs به کمک ما می‌آیند. شما می‌توانید از Winston یا morgan استفاده کنید. من morgan را بیش‌تر دوست دارم و در پروژه‌های قبلی‌ام چند بار از آن استفاده کرده‌ام.

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

npm install morgan

این کتابخانه فقط یک middleware است و باید به شکل زیر از آن استفاده کنیم.

app.use(morgan('combined'));

گزینه‌های دیگری هم هست که می‌توانید به عنوان option این کتابخانه استفاده کنید اما حالت combined به شما مقدار زیادی اطلاعات می‌دهد.

متغیر‌های env خود را ایمن نگه دارید

امکان دارد شما از sendgrid برای ارسال ایمیل، از Stripe, paypal یا زرین‌پال برای پرداخت‌ها، از سیستم‌های پیامکی و ... استفاده کرده باشید. برای هر کدام از این خدمات شما یک API_KEY گرفته‌اید که باید آن‌را در یک جای امن نگه‌داری کنید. بهترین روش این است که شما همه‌ی این‌ها را داخل یک فایل جدا به اسم .env نگه دارید. شما می‌توانید این مقادیر را درون متغیر‌هایی قرار دهید که در تمام برنامه‌ی خودتان از آن‌ها استفاده کنید. من استفاده از کتابخانه‌ی dotenv را پیشنهاد می‌کنم. پس باید آن‌را نصب کنیم.

npm install dotenv

سپس وقتی می‌خواهید از یکی از این متغیر‌ها درون برنامه‌ی خود استفاده کنید، مثلا stripe_key باید مانند کد زیر آن‌را صدا بزنید.

process.env.stripe_key

تمام.

یک نکنهی مهم: هرگر فراموش نکنید که اگر از گیت‌هاب استفاده می‌کنید، این فایل را داخل .gitignore بگذارید و در README بنویسید که چه API هایی برای استفاده از برنامه‌ی شما لازم است.

Header های ایمن ست کنید

داشتن header های ایمن هم بسیار مهم است. به شما کمک می‌کند تا api خودتان را در مقابل حملات XSS محافظت کنید. اینجا جایی است که Helmet به میدان می‌آید. این یک middleware دیگر است که باید آن‌را در index.js خود فراخوانی کنید.

برای api خود دسترسی تعیین کنید

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

باید مانند زیر در index.js آن را به عنوان یک middleware کانفیگ کنید، چیزی شبیه به کد زیر:

const whitelist = ['http://example1.com', 'http://example2.com']
const corsOptions = {
  origin: function (origin, callback) {
    if (whitelist.indexOf(origin) !== -1) {
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  }
}

app.use(cors(corsOptions));

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

مدیریت دیتابیس

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

۲ کتاب‌خانه معروف که برای hash‌ کردن می‌توانید از آن استفاده کنید: 

مدیریت احراز هویت

مدیریت احراز هویت یکی از مهم‌ترین فاکتور‌ها برای امن نگه داشتن وبسایت شماست. به شما کمک می‌کند که کاربر‌ها را مدیریت کنید و بفهمید که باید دسترسی به چه اطلاعات و صفحاتی را به آن‌ها بدهید. این روز‌ها معروف‌ترین روش احراز هویت JWT(Json Web Tokens) می‌باشد. به دلیل این‌که این قضیه بسیار طولانی و مهم می‌باشد، نمی‌توانیم استفاده از آن‌را در این مقاله پوشش بدهیم اما شما می‌توانید آموزش‌های بسیار زیادی در این مورد در اینترنت پیدا کنید.

استفاده از HTTPS

این روز‌ها گواهینامه‌های SSL تبدیل به یک موضوع مهم و ضروری در ساختن یک کسب و کار شده است. فروشنده‌های SSL زیادی موجود هستند اما در زیر می‌توانید دو تا از رایگان‌های آن‌را ببینید.

CloudFlare به عنوان CDN معروف است، اما سایت شما را به HTTPS تبدیل می‌کند و هم‌چنین از آن در برابر حملات DDOS محافظت می‌کند.

سخن پایانی

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

منبع

گردآوری و تالیف مهدی عقیقی
آفلاین
user-avatar

برنامه‌نویس وب، عاشق جاوااسکریپت و ریکت و لاراول :)

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید