با شماره حساب محرمانه مانند یک اعتبارنامه رفتار کنید: آن را حسابرسی کنید
اگر دانستن شماره کسی را وارد کند یا پیکربندیای را دریافت کند، آن اعتبارنامه است. بررسیهای اختیار، ذخیرهسازی، نرخ حدس و چرخش را انجام دهید.
فیلدی با برچسب شماره حساب بهطور خودکار یک ارجاع عمومی نیست، و برچسب آزمون نیست. آزمون آن است که مالکیت چه اجازهای میدهد: اگر دانستن شماره کسی را وارد میکند، نمایه اتصال را بارگیری میکند یا دستگاهی را مجاز میکند، آن شماره اعتبارنامهای با چرخه عمر است. هرگاه سرویسی هویتی عددی صادر کند و آن را بیضرر بنامد، پنج بررسی زیر را انجام میدهم. هر یک خطی در یک گزارش کوتاه تولید میکند، و گزارش خودِ تحویلدادنی است، نه داوری درباره محصول.
فهرست کنید مالکیت واقعاً چه میدهد
هر کنشی را که شماره باز میکند جداگانه بنویسید. ورود به یک پورتال، دریافت یک پرونده پیکربندی، مجاز کردن یک دستگاه جدید و ارائه ورود تونل پذیرفتهشده اختیارهای متفاوتی هستند و یک سرویس میتواند یکی را بدون بقیه پیاده کند. پورتالی که شماره را تنها فیلد میپذیرد چیزی درباره اینکه تونل همتای خود را چگونه احراز هویت میکند بعداً یا اینکه کلیدهای ترافیک چگونه مشتق میشوند نمیگوید.
مدل کلی آسان است: اعتبارنامه bearer آن است که دارنده میتواند بدون اثبات مالکیت کلید رمزنگاری جداگانه از آن استفاده کند، و این همان تمایزی است که RFC 6750 برای توکنها میکشد. این یک مقایسه است، نه ادعای اینکه سرویس مبتنی بر شماره OAuth پیاده میکند. اگر دارنده چیز دیگری لازم ندارد، شماره را راز bearer بدانید و بقیه طراحی را بر همان اساس طبقهبندی کنید.
آن را مانند راز محافظت کنید، نه مانند ارجاع
ذخیرهسازی از طبقهبندی پیروی میکند. مقداری که ورود میدهد جای مدیر رمز عبور است، نه تصویر صفحه، تاریخچه کلیپبورد، پیام گفتوگو یا یادداشت مرورگر. تصاویر صفحه نشت معمول هستند: شماره کوتاه است و بیضرر به نظر میرسد، پس در رشته پشتیبانیای میماند که از دستگاهی که از آن آمده عمر بیشتری میکند.
فیشینگ حالت شکست دیگر است و اهمیتی نمیدهد که شماره چقدر تصادفی است. کلاهبرداری که مقدار را میخواهد از شما میخواهد آن را در فرمی بچسبانید، و اعتبارنامهای که هرگز منقضی نمیشود و عامل دومی ندارد ارزش تلاش را دارد. مسیر ورود را از یک نشانک یا نشانی شناختهشده طی کنید، نه از پیوندی در پیامی که شماره را هم میخواهد.
مواد بازیابی را بخشی از راز بدانید. اگر اپراتور همچنین کد بازیابی، پین یا نشانی رایانامهای صادر کرده که میتواند حساب را بازنشانی کند، آنها اعتبارنامههای جداگانهای با همان الزام حفاظتی هستند. یک کانال بازنشانی محافظتنشده همه کنترلهای دیگر را به تزئین تبدیل میکند.
مقاومت در برابر حدس و محدودیت نرخ را با هم بررسی کنید
طول تنها در کنار روش تولید معنا دارد. شماره بلندی که از دنبالهای قابل پیشبینی تولید شود از مقدار کوتاهی که از مولد رمزنگاری بیرون میآید ضعیفتر است، و تعداد چشمگیر ارقام غیرقابل پیشبینیبودن را ثابت نمیکند. بپرسید مقدار چگونه تولید میشود، پیش از آنکه درباره دشواری حدس زدنش بیندیشید.
مقاومت در برابر حدس بهتنهایی نیز برابر نرخ تلاش نامحدود دوام نمیآورد. کنترلهایی که اهمیت دارند همانهایی هستند که اپراتور پیاده میکند: شمارنده تلاشهای ناموفق، قفلها، محدودسازی بر اساس منبع و اینکه شماره نادرست از شماره ناموجود قابل تشخیص است یا نه. اگر سرویس پشتیبانی کند، یک تلاش ناموفق نشان میدهد خطا چگونه است و آیا شمارنده تلاش مجدد ظاهر میشود:
# one attempt, then read the response and any counter or delay
# do not script repeated guesses against a live account
curl -i -X POST https://portal.example.invalid/login -d "account=000000000000"
ثبت کنید پاسخ چه را آشکار میکند. خطای جداگانه برای حساب ناشناخته حتی وقتی شماره غیرقابل حدس است یک اوراکل شمارش است، و این یافته به گزارش تعلق دارد، چه بتوانید آن را از سمت سرویسگیرنده اصلاح کنید و چه نتوانید.
چرخش و لغو را پیش از نیاز برنامهریزی کنید
فرایند پشتیبانیشده برای شماره گمشده یا فاششده را بیابید و آن را زمانی که همهچیز کار میکند بنویسید. آیا اعتبارنامه حساب اصلاً جایگزینشدنی است؟ آیا جایگزینی دستگاههای ثبتشده، نشستهای فعال یا پیکربندی بارگیریشده را باطل میکند؟ فرایند چه مواد بازیابی میخواهد؟ سرویسی بدون وابستگی به رایانامه ممکن است مسئولیت بازیابی بیشتری به کاربر منتقل کند، که فرایند را مهمتر میکند، نه کمتر.
جایگزینی حساب را از لغو اعتبارنامه جدا کنید. اگر شماره بارگیری کلید، گواهی یا نمایه را مجاز میکند، جایگزینی شماره ممکن است آن مواد بارگیریشده را معتبر بگذارد، و لغو مواد بارگیریشده میتواند عملیاتی متفاوت با مالکی دیگر باشد. فرض نکنید یک فیلد تغییرکرده هر اتصالی را پایان میدهد؛ مدل واقعی اپراتور را بررسی و یادداشت کنید کجا آن را تأیید کردید.
تصمیم را مستند کنید و بعداً دوباره بررسی کنید
برای هر سرویس گزارشی یکصفحهای نگه دارید: شماره چه اختیارهایی میدهد، کجا ذخیره میشود، چه کسی میتواند بازنشانیاش کند، چه شواهد استفادهای وجود دارد و در ساعت اول پس از افشا چه میکنید. همان گزارش است که بحثی درباره اصطلاحات را به تصمیمی قابل حسابرسی تبدیل میکند.
ادعاهای حریم خصوصی دامنه خود را میخواهند. شماره تولیدشده بهطور تصادفی میتواند همچنان شناسهای پایدار باشد که رویدادهای حساب را در زمان به هم پیوند میدهد؛ غیرقابل پیشبینیبودن همان غیرقابلپیوندبودن نیست، و هیچیک از دو ویژگی چیزی درباره فراداده شبکه نگهداشته نمیگوید. طرحهای کامل را مقایسه کنید، نه شمردن فیلدهای یک صفحه ورود.
پیش از ثبت آن:
- همه اختیارهایی که شماره میدهد فهرست شدهاند، شامل بارگیریها و مجازسازی دستگاه.
- کانالهای ذخیرهسازی و بازیابی با همان استانداردی محافظت میشوند که خود شماره.
- روش تولید و محدودیتهای نرخ دانستهاند، نه از طول حدس زدهشده.
- فرایند جایگزینی و فرایند لغو وجود دارند و میدانید کدام کدام را لغو میکند.
- گزارش نام میبرد چه کسی میتواند مقدار را بازنشانی کند و چه شواهدی پس از استفاده میماند.