حسین غفوری
حسین غفوری
خواندن ۳ دقیقه·۲ سال پیش

چرا نباید از متد ()eval استفاده کنیم!؟

چرا نباید از متد ()eval استفاده کنیم!؟
چرا نباید از متد ()eval استفاده کنیم!؟


سلام به همه عزیزان در این مطلب میخوام درباره اینکه "چرا نباید از متد یا همان فانکشن ()eval استفاده کنیم؟" بپردازم که خودم یه زمانی سردرگم این موضوع بودم که یکم سخت به علت های این موضوع پی بردم ولی میخواهم شما ها راحتر به علت های این موضوع پی ببرید.

پس تا اخر این مطلب همراه من باشید...

اول از همه میخواهم شما را با این متد آشنا کنم

آشنایی با متد ()eval :

یکی از متد های جنجالی جاوا اسکریپت متد ()eval نام دارد که یک تابع جهانی است که یک رشته را به عنوان یک دستور اجرا می کند. اگر یک رشته یک عبارت را نشان دهد، تابع آن را به عنوان یک عبارت محاسبه کرده و اجرا می کند:

consol.log(eval('6 + 6')); // returns 12 => type of Number

متد Eval یک رشته را به عنوان پارامتر می پذیرد (می گیرد) و آن رشته را به عنوان کد اجرا می‌کند. اگر یک عبارت را به آن ارسال کنید، آن عبارت را اجرا می کند. اگر چندین دستور جاوا اسکریپت را به آن ارسال کنید، آن دستورات را اجرا می کند. به همین سادگی. اجازه دهید برای درک بیشتر با یک مثال بررسی کنیم:

eval(alert(&quotHello&quot),alert(&quotHi&quot)); // returns Hello & Hi



چرا نباید از این متد استفاده کنیم!؟

  • علت اول و البته مهم : بحث امنیتی

زمانی که بخواهید یک ورودی را از کاربر بگیرید آن ورودی را هیچ وقت داخل Eveal قرار ندهید چون ریسک بالایی دارد و مشکلات امنیتی به وجود می آورد. از Eveal استفاده نمی کنیم مخصوصاً وب سایت هایی که داینامیک هستند و سمت سرور و دیتابیس دارن، ممکن هست حتی یک کد مخرب، سمت سرور ذخیره شود یعنی در داخل دیتابیس کاملاً باقی بماند و هر موقع که کاربر می آید در داخل سایت همان کد، برای هر کاربر اجرا می شود که قطعاً این کار خطر امنیتی به دنبال دارد.


برای درک بیشتر مثالی میاورم :

let userName = prompt(&quotEnter Your Username:&quot); eval(userName);
حالا ببینیم این کد چطور اجرا میشود و کاربر یا هکر چه کارهای می تواند انجام دهد:


در تصویر زیر شما این ()prompt را یک input نام کاربری در نظر بگیرید که یک کاربر به قصد حالا هک کردن یا هر چیزی، کدی را در داخل input وارد می کند :

نتیجه این عمل به صورت زیر است یعنی input هر کدی را از سمت یک هکر به راحتی می پذیرد و داخل سایت اجرا می شود و امنیت سایت را به خطر می اندازد :

این سخن همیشه در یادتان بماند: "هیچ وقت به ورودی های کاربر اعتماد نکن"




  • علت دوم : پایین بودن سرعت اجرا

متد یا همان فانکشن Eval خیلی سریع انجام یا اجرا نمی شود به عبارتی سرعت اجرایش خیلی پایین است چون که در مدت زمان بالایی اجرا می شود زیاد طول میکشد تا کد مارا اجرا یا همان run بکند.

زمانی که پروژه کدی زیادی دارد اگر از این متد برای اجرای کدها استفاده شود مدت زمانی زیادی صرف می شود که کد های ما را جاوا اسکریپت بخواند که قطعاً خودتان می دانید که این کار کار بهینه ی نیست ...


آنچه از این مطلب دانستیم:


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

حتی من از این متد به عنوان یک متد شیطانی یاد می کنم (نترسید فقط یک اصلاحه)

Don't be afraid, this is just a joke ? eval() = evil
Don't be afraid, this is just a joke ? eval() = evil


امیدوارم این مطلب برای شما مفید بوده بفرستید به دوستای برنامه نویستون آن ها هم از این مطلب استفاده کنند خیلی ممنونم که تا آخر این مطلب با من بودید ?❤️

جاوا اسکریپتسمت سرورمشکلات امنیتی
یک عدد توسعه دهنده وب | Web Developer
شاید از این پست‌ها خوشتان بیاید