موضوع مقاله: رشته ی جادویی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # رشته ی جادویی | مقدمه: در برنامه‌نویسی کامپیوتر، یک رشته جادویی ورودی‌ای است که برنامه‌نویس باور دارد هرگز توسط کاربر فراخوانی نخواهد شد و باعث فعال شدن عملکردهای پنهان می‌شود. | ## بخش 1: رشته ی جادویی | کاربر این برنامه احتمالاً ورودی‌ای را ارائه می‌دهد که در بیشتر موارد پاسخ مورد انتظار را می‌دهد. با این حال، اگر کاربر بی خبرانه آن ورودی به اصطلاح جادویی را فراهم کند، باعث فعال شدن عملکرد های داخلی می‌شود که در این مواقع پاسخ برنامه اغلب برای کاربر بسیار غیرمنتظره است (بنابراین “جادویی” به نظر می‌رسد). توسعه‌دهنده باید به جای اینکه عمیق‌تر به یک مشکل بپردازد و راه حل بهتری پیدا کند، راه حل سریعی پیدا کند. به عنوان مثال، هنگام تست کردن یک برنامه که جزئیات شخصی کاربر را می‌گیرد و شماره کارت اعتباری آن‌ها را تأیید می‌کند، یک توسعه‌دهنده ممکن است تصمیم بگیرد یک میانبر رشته جادویی اضافه کند که با وارد کردن ورودی بعید "***" به عنوان شماره کارت اعتباری، باعث شود برنامه خودکار به گونه‌ای پیش برود که گویا کارت معتبر است، بدون اینکه وقت صرف تأیید آن کند. اگر توسعه‌دهنده فراموش کند رشته جادویی را حذف کند، و یک کاربر نهایی برنامه به طور تصادفی "***" را به عنوان شماره کارت اعتباری موقت هنگام پر کردن فرم وارد کند، کاربر ناخواسته عملکرد پنهان را فعال می‌کند. تحلیل شرایط / مسائل مربوط به علت غالباً محدودیت‌های زمانی قابل توجهی وجود دارد که از ابتدای دخالت توسعه‌دهنده در یک پروژه خارج از کنترل او است. مشکلات رایجی که ممکن است به این ضد الگو منجر شود عبارتند از: Null != null یا هر تغییری که در آن یک نوع داده به صورت بیت به بیت با نوعی که قرار است یکسان باشد، مقایسه نمی‌شود. این مشکلی است که حتی درون یک محیط توسعه یکسان (زبان برنامه‌نویسی و کامپایلر یکسان) نیز ممکن است رخ دهد. این مشکل سابقه‌ای طولانی برای انواع عددی و بولین دارد و اکثر کامپایلرها این را به خوبی مدیریت می‌کنند (با هشدارها و خطاهای قابل اجرا، حل پیش‌فرض و غیره…). خطاها/هشدارهای تولید شده اغلب عمومی هستند یا یک خطای پیش‌فرض ‘بهترین تطبیق’ که پیام آن واقعاً توصیف نمی‌کند که چه اتفاقی در حال رخ دادن است. | ## بخش 2: رشته ی جادویی | اگر توسعه‌دهنده نتواند سرنخ‌های کافی برای ردگیری مشکل از طریق عیب‌زدایی به دست آورد، استفاده از میانبر و زدن کد یک رشته ‘پیش‌فرض’، ممکن است تنها راه برای حفظ برنامه زمان‌بندی پروژه باشد. گاهی اوقات یک طراحی سر راست و حتی ساده به نظر می‌رسد اما معلوم می‌شود که دارای یک نقص منطقی است، که به ورودی‌های احتمالی کاربر بستگی دارد، به دلیل شرایط غالباً پیش‌بینی نشده در انتهای توسعه برنامه‌ریزی شده. بنابراین، یک توسعه‌دهنده ممکن است احساس نیاز کند که ورودی کاربر را، با مجوزهای امنیتی/عملیاتی خاص برای مقابله با چنین شرایطی پیاده‌سازی کند. این موضوع می‌تواند به ویژه کنایه آمیز باشد زیرا گاهی اوقات معلوم می‌شود که یک طراحی قوی‌تر از ابتدا احتمالاً فضای کافی برای رسیدگی به نقص را فراهم می‌کرد. با این حال، این شاید زمان زیادی برای پیاده‌سازی لازم داشت و ممکن بود با مفهوم مهندسی پایه ی اصل سادگی، که به معنی ساده نگه داشتن یک طراحی و پیاده‌سازی آن و تنها برآورده کردن نیازهای ضروری اولیه آن است، در تضاد باشد. اعتماد بیش از حد به اینکه یک فلگ گلوبال هرگز به طور تصادفی یا خرابکارانه تنظیم نشود (غالباً یک فرض منطقی)، چنین پیاده‌سازی را برای اهداف تست و عیب‌زدایی توجیه می‌کند، به ویژه برای برنامه‌های کوچک با رابط‌های کاربری ساده. با این حال، اگر گسترش برنامه قابل توجه باشد، معمولاً فقط مسئله زمان است قبل از اینکه کسی آن فلگ را مقدار دهی کند. فرمت کردن سرسختانه محدود کردن فرمت ورودی یک راه حل ممکن برای نگهداری (رفع اشکال) است. در واقع، این به معنای اعتبارسنجی اطلاعات ورودی برای بررسی این است که آیا اطلاعات در فرمت صحیح هستند یا نه که به منظور کاهش احتمال کشف رشته جادویی توسط کاربر انجام میشود. مثال‌ها شامل اعتبارسنجی یک شماره تلفن برای اطمینان از این است که فقط شامل اعداد (و احتمالاً فضاها و علائم نگارشی به میزان محدود) باشد یا بررسی اینکه نام یک شخص دارای نام و نام خانوادگی (و به طور مناسب با حروف بزرگ) است. | ## بخش 3: رشته ی جادویی | یک استثناء برای رشته جادویی در کد اعتبارسنجی وجود دارد تا توسط اعتبارسنجی رد نشود. انتظار می‌رود که از آنجایی که کاربر به سرعت متوجه اجرای سختگیرانه فرمت خواهد شد، به ذهن کاربر خطور نخواهد کرد که سعی در وارد کردن رشته‌ای که مطابق با فرمت نیست داشته باشد. مانند هر فرآیند اعتبارسنجی ورودی، مهم است اطمینان حاصل شود که فرمت به گونه‌ای محدودکننده نباشد که به طور ناخواسته استفاده از برنامه توسط برخی کاربران را محدود کند. 129, Handling Dirty Data, , براساس سامانه یک کشور (به عنوان مثال، نیاز داشتن همه کاربران به دادن یک زیپ‌کد پنج رقمی) است، که باعث مشکلات برای کاربرانی است که در سایر کشور‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌ها زندگی میکنند. پیاده سازی هدفمند همانطور که اغلب در مورد الگوهای ضد الگو صادق است، سناریوهای خاصی وجود دارد که در آن‌ها رشته‌های جادویی یک راه حل صحیح برای پیاده‌سازی هستند. علاوه بر این، مواردی وجود دارد که کاربران رشته‌های جادویی را اختراع می‌کنند و سیستم‌هایی که برای پذیرش آن‌ها کد زده نشده‌اند می‌توانند نتایج غیرمنتظره‌ای مانند بدون پلاک تولید کنند. حوادث در ادامه فهرستی از برخی حوادث شناخته شده که استفاده از رشته جادویی باعث مشکلات شده است، آورده شده است. در چندین مورد مختلف، رانندگانی که پلاک‌های شخصی سازی شده بر روی وسایل نقلیه خود داشتند، جریمه های ترافیکی نادرست دریافت کرده‌اند. این مسئله باعث مشکلات شد وقتی رانندگان پلاک‌های واقعی با این مقادیر گرفتند و در نتیجه شروع به دریافت تعداد زیادی بلیط ترافیک مخصوص به وسایل نقلیه بدون پلاک کردند در سال 1999، هکرها یک نقص امنیتی در Hotmail را فاش کردند که به هر کس اجازه می‌داد با استفاده از رمز عبور ‘eh’ وارد هر حساب Hotmail شود که در آن زمان به عنوان “گسترده‌ترین حادثه امنیتی در تاریخ وب” نامیده شده بود. افراد با نام خانوادگی Null گزارش داده‌اند که در استفاده از سامانه‌های آنلاین با مشکلات مختلفی روبرو شده‌اند، مانند عدم توانایی در رزرو بلیط هواپیما، استفاده از وب سایت‌های مالیات دولت، یا پرداخت قبض‌های خدمات عمومی. | ## جمع‌بندی | بسته به سامانه، این مشکل ممکن است باعث شود که سامانه نام آن‌ها را نشان ندهد، به کاربر بگوید که نام دیگر وارد کنید (گاه با پیغام ادعای اینکه فضای نام خالی گذاشته شده است)، یا پیغام خطا نشان دادن.