چگونه یک وب اپلیکیشن امن پیاده‌سازی کنیم؟

چگونه یک وب اپلیکیشن امن پیاده‌سازی کنیم؟

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

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

- در سمت کاربر (Client Side) برای ارائهٔ فیدبک سریع به کاربر در استفاده از فرم‌ها، از JS استفاده کنید اما هرگز به آن اعتماد نداشته باشید و سمت سرور نیز دیتای ارسالی توسط کاربران را با یک زبان سمت سرور همچون روبی، پی‌اچ‌پی، پایتون و ... چک کنید.

- برای کلیهٔ سرویس‌های خود به بهینه‌ترین شکل ممکن اقدام به Logging (لاگ‌گیری) کنید (برای آشنایی بیشتر با این مقولهٔ مهم، به مقالهٔ‌ آشنایی با مفهوم Structured Logging در توسعهٔ نرم‌افزار مراجعه نمایید).

- کدهایی که نوشته‌اید را همواره مورد شک و تردید قرار دهید تا باگ‌های احتمالی را بیابید (برای این منظور، به مقالهٔ آشنایی با مفهوم Defensive Programming در صنعت توسعهٔ نرم‌افزار مراجعه نمایید).

- چنانچه از CMS برای توسعهٔ وب اپلیکیشن خود استفاده می‌کنید، همواره در انتخاب آن دقت کنید؛ به عبارت دیگر، سیستم مدیریت محتوایی را انتخاب کنید که از امنیت خوبی برخوردار باشد (در صورت استفاده از CMS، تمام تلاش خود را به کار گیرید تا از حداقل تعداد پلاگین‌ها استفاده کنید و در صورت نیاز، حتماً از پلاگین‌های معتبر استفاده نمایید).

دیتابیس
- اطلاعات حساس کاربران همچون صورت‌حساب‌ها، رمزعبور و ... را می‌بایست به درستی رمزنگاری کرد (به خاطر داشته باشیم که الگوریتم SHA-1 دیگر منقضی شده است).

- با استفاده از دستورات به اصطلاح Prepared SQL،‌ تا حد ممکن جلوی SQL Injection را بگیرید (برای کسب اطلاعات بیشتر، به مقالهٔ آشنایی با مفهوم SQL Injection در زبان PHP مراجعه نمایید).

- دولوپرهایی که از وردپرس برای طراحی وب اپلیکیشن استفاده می‌کنند می‌دانند که پیشوند جداول دیتابیس وردپرس wp است. با این حال برای افزودن یک لایهٔ امنیتی بیشتر، لازم است تا این پیش‌فرض را عوض کرده (مثلاً cust_wp) تا احتمال اینکه نام جداول توسط هکر به درستی حدس زده شوند به حداقل برسد.

رمزنگاری
- اطمینان حاصل کنید که کلیهٔ پسوردها به درستی Encrypt (رمزنگاری) شده‌اند و هرگز از الگوریتم‌های ابداعی خود استفاده نکنید (همچنین برای اضافه نمودن یک لایهٔ امنیتی بیشتر، از Salt استفاده کنید).

- کاربران را تشویق کنید تا از پسوردهای ترکیبی (حروف، اعداد و علائم) استفاده کنند (برای آشنایی با چگونگی انتخاب یک پسورد ایمن، به مقالهٔ چگونه برای مقابله با هکرها، پسوردی امن انتخاب کنیم؟ مراجعه نمایید).

- چنانچه فعالیت وب اپلیکیشن شما بسیار حساس است،‌ برای ورود کاربران می‌توان Two-factor Authentication (ورود دومرحله‌ای) در نظر بگیرید.

حملات DDoS و Brute Force
- در صورت نیاز، از کپچا به منظور جلوگیری از ارسال‌ ریکوئست‌های اسپم به بک‌اند وب اپلیکیشن استفاده کنید.

- روی سایز و ساختار دیتای ارسالی از سمت کاربران محدودیت معقولی اعمال نمایید (به عبارت دیگر، از ارسال دیتای حجیم سابمیت شده به سمت سرور جلوگیری به عمل آورید). همچنین در کلیهٔ فرم‌ها از توکن‌های CSRF استفاده کنید.

- از سرویس‌های جلوگیری از حملات DDoS همچون CloudFlare یا سرویس ایرانی ArvanCloud استفاده نمایید (برای آشنایی بیشتر با این نوع حملات، به مقالهٔ دیداس (DDoS) چیست؟ مراجعه نمایید).

ترافیک وب
- برای کلیهٔ بخش‌های وب‌ اپلیکیشن خود از پروتکل امن HTTPS استفاده نمایید (این کار علاوه بر حفظ امنیت دیتای کاربران، از دید موتورهای جستجویی همچون گوگل نیز در ارتباط با مبحث SEO مفید است).

- از هِدِرهای X-Frame-Option و X-XSS-Protection در ریسپانس‌های کاربران استفاده نمایید.

سرور
- پیش از هر چیز، در انتخاب شرکت هاستینگ خود دقت کنید؛ به عبارت دیگر، شرکتی را انتخاب کنید که همواره در لبهٔ تکنولوژی گام برمی‌دارد.

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

- اطمینان حاصل کنید که سرویس‌های بک‌اند به صورت عمومی در شبکه قابل مشاهده نیستند.

- اگر تعدادی سرویس بک‌اند دارید که در تعامل با یکدیگر هستند، حتماً اطمینان حاصل کنید که درخواست‌ها از سمت یکسری آدرس IP مشخص و محدود می‌تواند باشد.

- طبق یک برنامه‌ٔ مشخص، هر چند وقت یک‌بار پسوردهای سرویس‌های سمت سرور را تغییر دهید.

- چنانچه سرور Backup (پشتیبان) دارید، حتماً در صورت امکان آن را خاموش نمایید و از دید عموم خارج سازید.

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

اگر #استارتاپ دارید و تازه قصد راه‌اندازی کسب‌وکاری آنلاین در سر می‌پرورانید، حتماً در جذب نیروی دولوپر خود دقت لازم را به خرج دهید و در فرایند استخدام از تسلط متقاضیان به مباحث امنیتی اطمینان حاصل کنید.

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



بهزاد مرادی