زبان جاوا اسکریپت یک فناوری اساسی برای ساخت برنامههای کاربردی وب است. همچنین این زبان برنامه نویسی برای ساخت برنامههای سمت سرور، دسکتاپ و حتی موبایل بسیار محبوب است. و این محبوبیت گسترده زبان جاوا اسکریپت، آن را به یک هدف اصلی برای هکرها تبدیل کرده است. به همین دلیل هکرها به دنبال هدف قرار دادن آن از طریق حملات مختلف هستند. از آنجایی که زبان جاوا اسکریپت بیشتر در قسمت فرانت اند (سمت رابط کاربری) وبسایت استفاده میشود، منطقی است که ابتدا روی مسائل امنیتی جاوا اسکریپت در مرورگر ها تمرکز کنیم.
امنیت زبان جاوا اسکریپت به یک سری از ابزارها و روشهای مختلفی وابسته است. با امنیت زبان جاوا اسکریپت، از وبسایتمان در برابر حملات مختلفی محافظت میکنیم. همانطور که گفتیم به دلیل محبوبیت این زبان، هکرها همواره به دنبال حملات متفاوتی هستند.
به همین منظور برنامه نویسان مشکلات امنیتی زبان جاوا اسکریپت را تشخیص دادهاند. آنها با نرم افزار اسکن امنیتی جاوا اسکریپت و انواع ابزارهای تست، برنامهها را ایمنتر کردهاند و خطرات تهدید کننده امنیت زبان جاوا اسکریپت را تا حد زیادی کاهش دادهاند.
بیایید با مواردی از آسیبپذیری امنیت زبان جاوا اسکریپت شروع کنیم که اغلب در توسعه front-end رخ میدهند:
حملات cross-site scripting یا به اختصار xss به معنای اسکریپت نویسی متقابل میباشد، حمله ای ست یک نوع رایج از حمله تزریق کد (code injection) است که برنامههای تحت وب را با تشخیص آسیبپذیری آنها و تزریق کد مخرب، هدف قرار میدهد. به طوری که هکر با استفاده از اسکریپت سمت مرورگر، یک کد مخرب را از طریق یک برنامه تحت وب برای قربانی ارسال میکند. آنها معمولا این کار را با دور زدن سیاستهای وبسایت به دست میآورند. در نتیجه، هکرها میتوانند به اطلاعات کاربری دسترسی داشته باشند و اقدامات مختلفی را از طرف کاربر انجام دهند.
حملات CSRF یا cross-site request forgery، کاربران احراز هویت شده را مورد هدف قرار میدهند (کسانی که وارد حساب کاربری خود در وب سایتی شده اند). افرادی که قبلا مورد اعتماد وبسایت یا برنامهها قرار گرفتهاند. هکرها با استفاده از اطلاعات دریافت شده از کوکیهای مرورگر ، به حساب کاربری افراد دسترسی پیدا میکنند. به همین دلیل از طریق حساب کاربریشان، اقداماتی را بدون اطلاع آن ها انجام میدهند. نام دیگر حملات CSRF، حملات از طریق یک کلیک میباشد.
در توسعه front-end، ما همواره از ابزارها و کتابخانههای متفاوتی استفاده میکنیم. از طریق این ابزارها و کتابخانهها میتوان امنیت زبان جاوا اسکریپت را مورد هدف قرار داد.
خب با وجود چنین حملاتی، امنیت زبان جاوا اسکریپت به امری حیاتی تبدیل شده است؛ در ادامه مقاله با روشهای ایجاد کردن امنیت زبان جاوا اسکریپت آشنا میشویم.و روشهای متفاوتی را برای جلوگیری از به خطر افتادن امنیت زبان جاوا اسکریپت بررسی میکنیم.
توسعه دهندگان front-end از تگهای <script> برای وارد کردن کتابخانهها استفاده میکنند. اما این کار میتواند خطرات امنیتی را به همراه داشته باشد؛ چرا که ممکن است فایل منبع آن کتابخانه توسط شخص ثالث دستکاری شود.
به عنوان یک اقدام امنیتی برای این کار، میتوانیم از کد یکپارچگی (که به عنوان SRI شناخته میشود) استفاده کنیم. مثلا برای وارد کردن جی کوئری میتوانیم به شکل زیر اقدام کنیم :
<script
src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous">
</script>
خصوصیت integrity این اجازه را به مرورگر میدهد که اسکریپت را بررسی کرده و اطمینان حاصل کند که اگر احیانا منبع دستکاری شده باشد، کد بارگیری نشود. اما همواره باید از کدی که در ابتدا ارجاع میدهیم اطمینان حاصل کنیم.
ما میتوانیم از دستور “ npm audit ” برای شناسایی نقطه ضعفها استفاده کنیم. انجام این کار باعث میشود آسیبهای موجود تا حد امکان گزارش شود و اصلاحاتی برای آنها فراهم گردد.
زمانی که این عمل را به صورت خودکار درآوریم، مشکلات کمتر شده و رفع آنها سادهتر میشود.
یک راه حل این است که میتوانیم NPM را در CI خود برای هر درخواست pull به منظور شناسایی آسیب پذیریها اجرا کنیم. با این کار میتوانیم از بروز آسیبپذیری جلوگیری کنیم.
اما آسیبهایی وجود دارد که نیاز است یک برنامهنویس برای حل آنها به صورت دستی وارد عمل شود.
اخیرا گیتهاب یک ربات به نام Dependabot را معرفی كرده است تا وابستگیهای NPM را به صورت خودكار اسكن كرده و خطرات را از طریق ایمیل به شما اطلاع دهد.
نمادهای ^ یا ~ نسخه خودکار برای ورژنهای جزئی و پچ را نشان میدهد. (بسته به نماد آنها)
از آنجا که بیشتر کتابخانههای شخص ثالث آسیب پذیریهای رفع اشکال را به عنوان bump نسخه پچ منتشر میکنند، حداقل فعال کردن به روزرسانی خودکار پچ به کاهش خطرات امنیتی کمک میکند.
به روزرسانی خودکار پچ، به کاهش خطرات امنیتی کمک میکند؛ چرا که اکثر کتابخانههای شخص ثالث آسیب پذیریهای رفع اشکال را به عنوان bump نسخه پچ منتشر میکنند.
یک قاعده کلی این است که نباید هرگز به اعتبارسنجیهای سمت کاربر متکی باشیم؛ چرا که هکرها میتوانند آنها را دستکاری کرده و تغییر دهند. به عنوان مثال، اگر در قسمت کامنت هر چیزی را با نقل قول </script><script> تایپ کنیم، آن نقل قولها با دو <</script>><<script>> جایگزین میشوند. بنابراین کد جاوا اسکریپت وارد شده اجرا نخواهد شد. به این اسکریپت بین سایتی (XSS) میگویند.
روشن بودن strict mode باعث میشود، نوشتن کد نا امن محدود شود. فعال کردن آن هم بسیار ساده است. فقط کافی است دستور زیر را در خط اول فایلهای جاوا اسکریپت نوشته شود:
use strict
linterها تجزیه و تحلیل ایستایی را بر روی کد ما انجام میدهند. این کار باعث میشود کیفیت بیشتر شده و از دامهای مشترک جلوگیری شود. فرایند لینتینگ منجر به کاهش خطرات امنیتی میشود. JsLint ، JsHint ، EsLintابزارهای مشهوری هستند که برای جاوا اسکریپت استفاده میشوند. همچنین میتوان از ابزارهایی مانند SonarCloud نیز برای شناسایی کد و آسیب پذیریهای امنیتی شناخته شده استفاده کرد.
هکرها معمولا سعی میکنند کد شما را بفهمند تا آن را هک کنند. بنابراین داشتن یک کد منبع قابل خواندن در ساخت تولید، سطح حمله را افزایش میدهد. اگر کد جاوا اسکریپت خود را کوچک و به هم ریخته (فشرده) کنیم، هک کردن آن برای مهاجمان سختتر میشود.
امنیت زبان جاوا اسکریپت بسیار مهم است؛ چرا که زبان جاوا اسکریپت محبوبیت زیادی بین کاربران دارد. با حداقل ابزارها میتوانیم کدهایمان را ایمن کرده و از حملات رایج موجود جلوگیری کنیم.