کلمه جو
صفحه اصلی

زمان بررسی تا زمان استفاده

دانشنامه عمومی

زمان بررسی تا زمان استفاده (به انگلیسی: Time of check to time of use) (به اختصار TOCTTOU یا TOCTOU، به صورت TOCK too تلفظ می شود) نام یک دسته از باگ های نرم افزاری است. در خیلی از برنامه ها ابتدا یک شرط بررسی می شود و سپس از نتیجهٔ آن شرط در جای دیگری استفاده می شود. این عمل اتمی و تجزیه ناپذیر نیست و بین زمان بررسی کردن یک شرط و زمان استفاده از نتایج آن، یک حفره زمانی وجود دارد. این حفره زمانی این امکان را ایجاد می کند که پس از بررسی کردن اولیه شرط، نتایج آن توسط یک رویداد خارجی تغییر کند، در نتیجه، وقتی که برنامه قصد استفاده از نتایج را دارد، آن نتایج دیگر معتبر نخواهند بود، چرا که تغییر یافته اند. این باگ، نوعی شرایط رقابتی است.
به عنوان یک مثال ساده، می توان یک برنامه وب را تصور کرد که به کاربران اجازه می دهد تا صفحات را ویرایش کنند، همچنین به مدیران هم اجازه می دهد تا آن صفحه را قفل کرده و مانع از ویرایش آن توسط دیگر کاربران شوند. کاربری درخواست ویرایش آن صفحه را می دهد، و فرمی برای او باز می شود که از طریق آن می تواند صفحه مورد نظر را ویرایش کند، قبل از اینکه کاربر صفحه را ارسال کند و تغییرات در آن صفحه اعمال شوند، یک مدیر آن صفحه را قفل می کند، که مانع از ویرایش آن توسط کاربر می شود. با این حال، از آنجا که عمل ویرایش از قبل شروع شده است، وقتی که کاربر تغییراتش را در صفحه ذخیره می کند، تغییرات او مورد قبول واقع می شود.وقتی که کاربر شروع به ویرایش می کند، اختیارات او بررسی می شود و به کاربر اجازه ویرایش صفحه داده می شود. با این حال، اختیارات او بعداً مورد استفاده قرار می گیرند، وقتی که کاربر دیگر نباید اجازه ویرایش داشته باشد.
این نوع از باگ ها، عمدتاً در سیستم عامل یونیکس در حین کار کردن با فایل سیستم رایج هستند، اما در جای های دیگر هم می توانند اتفاق بیوفتند، مثلاً در حین کار با متغیرهای سراسری. در اوایل دهه ۱۹۹۰، برنامه mail در بی اس دی نسخه ۴٫۳ یک جور شرایط رقابتی در حین کار با فایل های موقت داشت که امکان سوء استفاده از آن هم وجود داشت. این برنامه از mktemp()‎ استفاده می کرد (که هم اکنون منسوخ شده و mkstemp()‎ جایگزین آن شده). نسخه های اولیه اوپن اس اس اچ هم در حین کار با سوکت های دامنه یونیکس یک شرایط رقابتی داشتند.
در یونیکس، اگر کد زیر در برنامه ای که setuid است استفاده شود، یک باگ TOCTTOU خواهد داشت:


کلمات دیگر: