13 قانون برای افزایش امنیت در جاوا
یکشنبه 10 فروردین 1399افزایش امنیت در جاوا از اهمیت بسیار زیادی برخوردار می باشد، ما در این مطلب قصد داریم کمی بیشتر درباره افزایش امنیت در جاوا صحبت کنیم.
امنیت در جاوا یکی از مهمترین، گسترده ترین و پیچیده ترین اقداماتی است که شما برای توسعه اپلیکیشن های جاوا باید به آن دقت داشته باشید. امنیت نرم افزارها امروزه تقریبا مورد غفلت واقع می شود و یا این که تنها به صورت جزئی به آن پرداخته می شود. اگر به لیست نرم افزارهای جدید نگاهی بیندازیم می توانیم مشاهده کنیم که در بسیاری از آنها داده های زیادی به دلیل ضعف امنیت منتشر شده اند. اگر شما قصد دارید بر روی یک نرم افزار سرمایه گذاری کنید باید توجه ویژه ای به امنیت آن داشته باشید. به همین دلیل ما تصمیم داریم در این مطلب کمی بیشتر درباره امنیت در جاوا صحبت کنیم.
مقدمه ای درباره امنیت در جاوا
یک خبر بسیار خوب این است زبان برنامه نویسی جاوا یک زبان پلتفرم فوق العاده برای توسعه نرم افزار است که ویژگی های امنیتی بسیار زیادی را در اختیار شما قرار می دهد. پکیج امنیتی جاوا در شرایط مختلف مورد آزمایش قرار گرفته است و اغلب نیز برای آسیب پذیری های امنیتی جدید به روز رسانی می شود. API امنیتی جدید Java EE در سپتامبر سال 2017 میلادی منتشر شد که به موضوع آسیب پذیری های موجود در فضای ابری و میکروسرویس ها می پردازد. علاوه بر این اکوسیستم جاوا ابزارهای گسترده ای را برای گزارش مسائل امنیتی دارا می باشد که می توانید از آن نیز استفاده کنید.
با وجود داشتن یک بستر امن برای برنامه نویسی ما باز هم باید مراقب نکات مختلف در خصوص امنیت در جاوا باشیم. توسعه اپلیکیشن با بالاترین امنیت در جاوا کار پیچیده ای است که می تواند در بک گراند انجام شود. شما باید در هر مرحله از توسعه نرم افزار خود از ویژگی های مربوط به سطح کلاس گرفته تا احراز هویت API مراقب امنیت در جاوا باشید.
قانون شماره یک: کدهای تمیز و قدرتمند در جاوا بنویسید( بخش اول)
آسیب پذیری های مربوط به امنیت در جاوا علاقه شدیدی به پنهان شدن درون پیچیدگی های کد شما دارند. بنابراین توصیه ما به شما این است که بدون این که به عملکرد برنامه خود آسیبی بزنید سعی کنید کدهای خود را به ساده ترین شکل ممکن بنویسید. استفاده از اصول طراحی نرم افزار در جاوا مانند DRY که خلاصه شده عبارت don't repeat yourself است به شما در این مسیر کمک زیادی می کند. همیشه سعی کنید کمترین میزان اطلاعات را در کدهای خود قرار دهید. مخفی کردن جزئیات می تواند باعث افزایش امنیت در جاوا شود. برای این که کدهای امنی را به زبان جاوا بنویسید حتما به سه نکته ای که در بخش بعدی برای شما بیان می کنیم دقت کنید.
قانون شماره یک: کدهای تمیز و قدرتمند در جاوا بنویسید( بخش دوم)
- برای افزایش امنیت در جاوا به خوبی از سطح دسترسی ها استفاده کنید. دانستن این که چگونه سطح دسترسی های مختلفی را برای کلاس ها، متدها و ویژگی ها تعریف کنید یک روش بسیار خوب برای حفظ ایمنی کدهای شما می باشد. هر چیزی که باید به صورت خصوصی در کلاس تعریف شود باید به صورت private تعریف شود.
- از تامل کردن بیش از حد بپرهیزید. در حال حاضر تکنیک های پیچیده ای وجود دارد که به شما در بخش های زیادی کمک می کند ولی با این حال شما باید از استفاده از آنها خودداری کنید. استفاده از تکنیک های خیلی پیچیده می تواند بی ثباتی و ضعف را به کدهای شما اضافه کند و باعث شود که امنیت در جاوا نقض شود.
- همواره سعی کنید API ها و همینطور اینترفیس های خود را به کوچکترین شکل ممکن طراحی کنید. سعی کنید کامپوننت های مختلف را جدا کرده و در کوچکترین فضای ممکن از آنها استفاده کنید. بنابراین با این کار حتی اگر امنیت در جاوا تنها در یک بخش از اپلیکیشن شما نقض شود بخش های دیگر به مشکل نخواهند خورد.
قانون شماره دو: از Serialization خودداری کنید( بخش اول)
یک نکته دیگر در برنامه نویسی این است که از Serialization خودداری کنید که امروزه تبدیل به یک قانون برای افزایش امنیت در جاوا شده است. Serialization یک ورودی از راه دور می دهد و تبدیل به یک نقطه ضعف برای برنامه شما می شود. توجه داشته باشید که این موضوع با کانستراکتورها سطوح دسترسی همراه می شود و به جریانی از داده های ناشناخته اجازه می دهد تا کدها را در JVM اجرا کنند. در نتیجه این موضوع نیز serialization باعث نقض امنیت در جاوا می شود و نقاط ضعفی را در اپلیکیشن های شما به وجود می آورد.
قانون شماره دو: از Serialization خودداری کنید( بخش دوم)
برای افزایش امنیت در جاوا تا جای ممکن سعی کنید از serialization و deserialization در کدهای جاوای خود جلوگیری کنید. به جای آن می توانید از فرمت های مشابه serialization همچون JSON و یا YAML استفاده کنید. هرگز یک نقطه محافظت نشده از شبکه که می تواند یک جریان serialization را دریافت کرده و اجرا کند را در معرض نمایش قرار ندهید. شاید این موضوع چندان مهم نباشد ولی می تواند به یک نقطه ضعف در برنامه شما تبدیل شود.
قانون شماره سه: هیچگاه فایل های رمزنگاری نشده و یا PII ها را در معرض نمایش قرار ندهید
شاید باور کردن این موضوع برای شما سخت باشد ولی باید بدانید که این موضوع هر ساله باعث بروز مشکلات امنیتی بسیار زیادی در نرم افزارهای مختلف می شود.
زمانی که یک کاربر رمز عبور خود را در مرورگر وارد می کند اگر آن را به عنوان یک متن به سرور شما ارسال می کند باید بدانید که کاربر شما به صورت کامل در معرض هک شدن قرار می گیرد. شما باید پسورد را رمزنگاری کرده و بعد به سمت ارسال کنید. در سمت سرور نیز مقایسه باید انجام شود و در صورت درست بودن اجازه به کاربر داده شود.
برای افزایش امنیت در جاوا قوانینی وجود دارند که مربوط به گذر واژه ها می باشند و برای اعمال اطلاعات شخصی به کار گرفته می شوند. توجه داشته باشید که کارت های اعتباری، شماره تامین اجتماعی و ... باید با بالاترین سطح امنیت در جاوا به سمت سرور ارسال شوند و باید مراقبت های ویژه ای نسبت به آنها انجام شود.
فایل ها و یا PII رمزنگاری نشده در پایگاه داده می توانند به عنوان یک شکاف امنیتی بسیار بزرگ شناخته شوند که تنها منتظر یک مهاجم هستند. علاوه بر این سعی کنید به هیچ وجه فایل ها و یا داده های خود را log نکنید و به شکل های دیگر در شبکه قرار ندهید. به جای این مورد سعی کنید رمز عبور خود را به صورت هش تبدیل کرده و در دیتابیس ذخیره کنید. امروزه الگوریتم های زیادی برای هش کردن وجود دارد که می توانید از آنها استفاده کنید.
برای افزایش امنیت در جاوا از کتابخانه های شناخته شده و آزمایش شده استفاده کنید( بخش اول)
زمانی که درباره افزایش امنیت در جاوا صحبت می کنیم بدون شک باید به این مورد توجه ویژه ای داشته باشیم. امنیت در جاوا بدون استفاده از کتابخانه های امن ممکن نیست. استفاده از کتابخانه ها و فریم ورک های شناخته شده و قابل اعتماد از یک کتابخانه ساده هش کردن پسورد گرفته تا احراز هویت REST API می تواند به میزان بسیار زیادی تاثیر گذار باشد.
خوشبختانه زبان برنامه نویسی جاوا و اکوسیستم آن شرایط بسیار خوبی را برای شما فراهم کرده است. برای امنیت در جاوا کتابخانه Spring یک کتابخانه استاندارد به شمار می آید. این کتابخانه طیف گسترده ای از گزینه ها را که انعطاف بسیار زیادی دارند به شما ارائه می دهد که با استفاده از آنها می توانید امنیت در جاوا را در اپلیکیشن های خود تامین کنید.
برای افزایش امنیت در جاوا از کتابخانه های شناخته شده و آزمایش شده استفاده کنید( بخش دوم)
اولین کاری که شما برای برقراری امنیت در جاوا باید انجام دهید این است که قبل از ساخت اپلیکیشن تحقیقات خود را انجام دهید. شما باید درباره کتابخانه ها تحقیق کنید و از میان آنها بهترین کتابخانه ها را برای پیاده سازی انتخاب کنید. به عنوان مثال اگر قصد دارید برای احراز هویت ها در جاوا از JSON Web Tokens استفاده کنید باید به یک کتابخانه جاوا دقت کنید که JWT را محصور کند و بعد از آن یاد بگیرید که چگونه آن را با Spring Security ادغام کنید.
حتی با استفاده از یک ابزار قابل اعتماد انجام عملیات احراز هویت بسیار ساده است. بنابراین سعی کنید که تمامی گزینه ها را بررسی کنید و ایمن ترین گزینه را انتخاب کنید تا امنیت در جاوا را افزایش دهید.
قانون پنجم: نگران ورودی های خارجی باشید
تشخیص این که آیا اطلاعاتی که از طریق فرم برای شما ارسال می شود برای یک کاربر خاص است و یا این که از طریق یک API از راه دور است بسیار سخت است بنابراین برای افزایش امنیت در جاوا به هیچ وجه نباید به ورودی های خارجی اعتماد کنید.
SQL injection و cross-site scripting حملات شناخته شده ای هستند که از ورودی های خارجی سواستفاده می کنند. یک مثال شناخته نشده که امروزه امنیت بسیاری از اپلیکیشن ها را تحت تاثیر خود قرار داده است billion laughs attack می باشد که حتما باید مراقب آن باشید. هر زمان که شما یک ورودی را دریافت می کنید باید به خوبی آن را بررسی کنید. شما می توانید برای این کار از ابزارهای آماده ای که وجود دارند استفاده کنید.
قانون ششم: از دستورهای آماده برای مدیریت پارامترهای SQL استفاده کنید
هر بار که شما یک دستور جدید SQL می سازید شما این اجازه را می دهید که کدهای اجرایی وارد دستورات شما شوند. با دانستن این موضوع این می تواند مفید باشد که از کلاس java.sql.PreparedStatement برای ساخت SQL استفاده کنید. امکانات مشابه برای پایگاه داده های NoSQL مانند MongoDB نیز وجود دارد. اگر شما از یک لایه ORM استفاده می کنید بهتر است که برای پیاده سازی آن از PreparedStatements استفاده کنید.
قانون هفتم برای افزایش امنیت در جاوا: نحوه پیاده سازی خود را از طریق پیغام های خطا فاش نکنید
این موضوع یک نکته بسیار مهم درباره امنیت در جاوا است. ارورهایی که برای کاربران نمایش داده می شود می تواند شامل اطلاعاتی برای هکرها باشد که استفاده از آنها می تواند باعث کاهش امنیت در جاوا شود. برخی از پیغام های خطا نمایشگر اطلاعاتی درباره تکنولوژی که شما برای امنیت در جاوا مورد استفاده قرار داده اید هستند و چگونگی استفاده شما از این تکنولوژی ها برای افزایش امنیت در جاوا را نیز نمایش می دهند. بنابراین بهتر است که از نمایش دادن این اطلاعات خودداری کنید.
هشدارهای مربوط به ورود ناموفق نیز می توانند در این دسته از مواردی که باعث کاهش امنیت در جاوا می شوند قرار بگیرد. به طور کلی پیغامی که برای کاربر نمایش داده می شود باید با فرمت " ورود ناموفق" باشد. بنابراین نباید از عبارت های " نام کاربری شناسایی نشد" و یا " رمز عبور اشتباه است" استفاده کنید. بنابراین شما برای افزایش امنیت در جاوا باید تا جای ممکن اطلاعات کمتری را ارائه دهید.
در حالت ایده آل پیغام خطا نباید شامل اطلاعاتی درباره تکنولوژی که شما استفاده کرده اید باشد و به همین علت شما باید این اطلاعات را تا جای ممکن پنهان نگه دارید.
قانون هشتم: موارد مربوط به امنیت در جاوا را به روز نگه دارید
از سال 2019 اوراکل شمای لایسنس جدید پیاده سازی کرد و برنامه ریزی مربوط به آن را برای جاوا منتشر کرد. متاسفانه برای توسعه دهندگان این موضوع کار را راحت تر نکرده است. با این وجود شما مسئولیت دارید که به روزرسانی های مربوط به امنیت در جاوا را از این طریق بررسی کنید و آنها را بر روی JRE و JDK خود اعمال کنید.
با بررسی منظم صفحه اوراکل برای هشدارهای امنیتی مطمئن شوید که پچ های مربوطه را دانلود می کنید. هر ماه اوراکل به روزرسانی های جدیدی را برای LTS فعلی که برای جاوا منتشر شده است ارائه می دهد. مشکلی که وجود دارد این است که تنها در صورتی در دسترس است که شما هزینه مربوط به پشتیبانی لایسنس جاوا را پرداخته باشید.
اگر سازمان شما هزینه مربوطه را پرداخته است شما تنها کافی است که روت خودکار را دنبال کنید. در غیر این صورت احتمالا باید از OpenJDK استفاده کنید و عملیات پچ کردن را خودتان انجام دهید. در این مورد شما می توانید پچ باینری را اعمال کنید و یا این که می توانید به سادگی OpenJDK موجود خود را با آخرین نسخه نصب شده جا به جا کنید.
قانون نهم برای افزایش امنیت در جاوا: به دنبال آسیب پذیری در وابستگی های برنامه خود باشید
در حال حاضر ابزارهای بسیار زیادی موجود هستند که کدها و همینطور وابستگی های شما را به صورت خودکار بررسی می کنند تا آسیب پذیری های آنها را بیابند که شما می توانید از آنها برای افزایش امنیت در جاوا استفاده کنید.
پروژه امنیت اپلیکیشن های تحت وب که به اختصار OWASP نامیده می شود سازمانی است که تشکیل شده است تا امنیت در جاوا را افزایش دهد. لیست OWASP دارای مجموعه ای از ابزارهای قابل اعتماد و با کیفیت بالای خودکار است که عملیات اسکن کردن کدهای شما را انجام می دهند. در میان این ابزارها، ابزارهایی نیز وجود دارند که بر پایه زبان برنامه نویسی جاوا ساخته شده اند.
شما باید کدهای خود را به صورت منظم بررسی کنید ولی در کنار این موضوع برای افزایش امنیت در جاوا باید مراقب وابستگی های پروژه خود هم باشید. اهداف هکرها معمولا هم کتابخانه های متن باز و هم سایر کتابخانه ها هستند. بنابراین سعی کنید به دنبال به روزرسانی برای وابستگی های پروژه خود باشید و به محض انتشار نسخه های به روز رسانی شده شما هم آنها را در پروژه های خود به روزرسانی کنید.
قانون دهم: فعالیت های کاربران را لاگ و مانیتور کنید
اگر شما فعالیت کاربران خود را نظارت نکنید حتی یک brute-force ساده نیز می تواند برای هک کردن اطلاعات کاربران شما موفقیت آمیز باشد. شما باید از ابزارهایی که در این زمینه وجود دارند استفاده کنید تا باعث افزایش امنیت در جاوا شوید.
اگر می خواهید مطمئن شوید که چرا نظارت بر فعالیت کاربران مهم است کافی است که پکیج های مربوط به TCP در اپلیکیشن خود را مشاهده کنید. شما می توانید انواع مختلفی از فعالیت ها را مشاهده کنید که شامل تعاملات ساده کاربران شما نیز می باشد. برخی از این فعالیت ها به منظور پیدا کردن آسیب پذیری ها انجام می شوند.
شما باید تلاش های ناموفق برای ورود به اپ را لاگ کرده و آنها را مانیتور کنید تا از سواستفاده هایی که به این شکل انجام می شوند جلوگیری کنید.
نظارت بر فعالیت های کاربران می تواند یکی از بهترین روش ها برای افزایش امنیت اپلیکیشن جاوا باشد که حتما باید توجه ویژه ای به آن داشته باشید.
قانون یازدهم: برای افزایش امنیت در جاوا به دنبال حملات Dos باشید
هر بار که شما منابع سنگینی را پردازش می کنید و یا عملگرهای سنگینی را اجرا می کنید باید از استفاده از این منابع محافظت کنید.
اوراکل دارای بردارهایی است که برای حل این مشکل به کار گرفته می شوند و برای افزایش امنیت در جاوا به کار گرفته می شوند و شما می توانید از آنها برای جلوگیری از حملات Dos استفاده کنید.
در اصل هر بار که شما قصد دارید یک عملیات سنگین را انجام دهید( به عنوان مثال استخراج یک فایل فشرده سازی شده) باید استفاده از منابع را نظارت کنید. در واقع شما نباید به مانیفست فایل خود اعتماد کنید.
به صورت مشابه در برخی از پردازش ها شما باید به دنبال حلقه های مشکوک باشید. اگر حلقه ای مشکوک است یک محافظ به آن اضافه کنید تا مطمئن شوید که این حلقه پردازش خود را به درستی انجام می دهد.
قانون دوازدهم: حتما از پکیج مدیریت کننده امنیت در جاوا استفاده کنید
جاوا دارای یک پکیج مدیریت کننده امنیت می باشد که منابعی که یک پردازش در حال اجرا به آنها دسترسی دارد را محدود می کند. این ابزار می تواند اپلیکیشن شما را براساس دیسک، مموری، شبکه و دسترسی JVM محصور کند. محدود کردن این موارد باعث می شود تا احتمال هک شدن برنامه های شما به میزان زیادی کاهش پیدا کند. چنین محصور کردنی می تواند معایبی را نیز برای شما داشته باشد به همین علت است که این پکیج به صورت پیش فرض برای شما فعال نیست.
در واقع شما باید خودتان تصمیم بگیرید که آیا برای افزایش امنیت در جاوا قصد دارید از این پکیج استفاده کنید یا خیر چرا که استفاده از آن مزایا و معایب خاص خود را دارا می باشد.
قانون سیزدهم: برای افزایش امنیت اپلیکیشن جاوا از سرویس های احراز هویت مبتنی بر کلود استفاده کنید
برخی از اپلیکیشن ها باید داده های کاربران خود را در اختیار داشته باشند، با این حال سایر اپلیکیشن ها می توانند از ارائه دهنده های سرویس های مبتنی بر کلود استفاده کنند.
شما با کمی جستجو می توانید ارائه دهندگان خدمات احراز هویت مبتنی بر کلود مختلفی را پیدا کنید. مزیت استفاده از سرویس های این چنینی این است که ارائه دهنده خدمات در برابر امنیت داده های کاربران شما مسئول است. از طرف دیگر از طرف دیگر اضافه کردن یک سرویس احراز هویت مبتنی بر کلود پیچیدگی معماری شرکت شما را افزایش می دهد.
نتیجه گیری
ما در این مطلب سعی کردیم سیزده قانون برای افزایش امنیت در جاوا را برای شما بیان کنیم که امیدواریم برای شما مفید بوده باشد. امیدواریم با مطالعه این مطلب بتوانید امنیت اپلیکیشن جاوا خود را بهبود دهید و اپلیکیشن هایی با امنیت بسیار بالا را طراحی کنید به سادگی قابل هک شدن نباشند. در پایان تشکر می کنیم از شما که این مطلب را تا انتها مطالعه کردید.
- Java
- 2k بازدید
- 0 تشکر