من دو دقیقه را صرف آزمایش API آمازون کردم. بس بود

در این خلاصه ۲۰۰ کلمهای:
سادگی نقطه پایانی آمازون برای بهروزرسانی نمایه فرزند (تنها ارسال ناممانند "Kids3") فرصتی برای آزمایش غیرمنتظره API فراهم کرد. با استفاده از ابزار Rentgen، سوالاتی بنیادین بدون intención خرابکاری پرسیده شد: چهگاه عدم احراز هویت؟ پاسخ به جای ۴۰۱، ۴۰۰ عمومی با پیام خطای مبهم بود. استفاده از HTTP Method غیرمجاز؟ پاسخ ۴۰۳ انگار دسترسی ممنوع اما نه قابل تعریف. تغییر حروفنویسی مسیر؟ دریافت صفحه کامل HTML خطای "وبسایت موقتاً غیردر دسترس!" از یک API JSON! ارسال محموله ۱۰ مگابایتی؟ به جای خطای ۴۱۳ Too Large، پاسخ ۴۰۴ غیرمنتظره.
این رفتارهای مبهم نشاندهنده شکافی است: سیستمهای فناوری بزرگ، سرعت رشدشان از نظم قراردادی (API Contract) پیشی میگیرد. کدهای وضعیت جابهجا میشوند، لایههای لبه (CDN) نشت میکنند، و اعتبارسنجیها دیر اجرا میگردند. نگرانکنندهتر این نیست که این اشکالات وجود دارند، بلکه سرعت کشفشان است. این مطالعه (کامل در لینک ذکرشده) راهحل را در اتوماسیون پیش از اتوماسیون میبیند: هنگامی که ابزارهای تست اولیه (حتی برای API ساده) وجود ندارد، این نقاط پایانی "بیخطر" مبدل به کانونهای پنهان بینظمی میگردند.
چیزی به طرز عجیبی آرامش بخش در مورد شرکت های بزرگ فناوری وجود دارد. شما فرض می کنید جایی، در اعماق هزارتوی زیرساخت های آنها، تیم هایی از مهندسان بسیار جدی وجود دارند که مطمئن می شوند همه چیز دقیقاً همانطور که باید رفتار می کند.
بنابراین زمانی که تصمیم گرفتم یک نقطه پایانی آمازون را آزمایش کنم، خسته کننده ترین موردی را که می توانستم پیدا کنم انتخاب کردم.
نه پرداخت ها تسویه حساب نیست. هیچ چیز مربوط به پول نیست.
فقط این:
PUT /custom/profilepickerserviceapicontracts/marketplaces/{id}/members/{memberId}
تنها کاری که انجام می دهد به روز رسانی نام نمایه فرزند است. شما “نام” را می فرستید: “Kids3” و زندگی ادامه دارد. یا حداقل، این نظریه است.
درخواست واقعی مرورگر را گرفتم، آن را در Rentgen چسباندم، run را فشار دادم و رفتم قهوه درست کنم. دو دقیقه بعد نمره گواهینامه گرفتم: 16 از 100.
شانزده.
حالا، این یک تست نفوذ نبود. من سعی نکردم سیستم را خراب کنم. من تزریق SQL در آن پرتاب نکردم. من برخی از تنظیمات عجیب و غریب fuzzing را چرخش نکردم.
من فقط سوالات خیلی خسته کننده پرسیدم.
اگر احراز هویت وجود نداشته باشد چه اتفاقی میافتد؟
ظاهراً نه 401 – بلکه 400. با یک عبارت عمومی “متأسفیم، ما در حال حاضر با مشکلاتی روبرو هستیم.” این آرامشبخش است، به همان ترتیب که زنگ هشدار دود که فریاد میزند «یک جایی اشتباه است» آرامشبخش است.
اگر از روش HTTP پشتیبانی نشده استفاده کنید چه اتفاقی میافتد؟
شما 403 می گیرید. انگار این روش وجود دارد، اما به اندازه کافی مهم نیستید که از آن استفاده کنید.
اگر مسیر را با حروف بزرگ بنویسید چه اتفاقی میافتد؟
شما HTML دریافت می کنید. بله. یک صفحه کامل CloudFront «وبسایت موقتاً در دسترس نیست» – از یک API JSON. زیرا ظاهراً گاهی اوقات قرارداد ساختارمند شما فقط یک روز مرخصی می گیرد.
و سپس سرگرمی: ارسال یک محموله 10 مگابایتی. مخرب نیست. فقط بزرگ به جای یک 413 Payload Too Large تمیز، درخواست به قدری عمیق در پشته حرکت می کند که با 404 اشتباه گرفته شود.
همه اینها از تغییر نام نمایه فرزند.
این درباره «آمازون خراب است» نیست. این در مورد این است که وقتی سیستم ها سریعتر از نظم قراردادی خود رشد می کنند چه اتفاقی می افتد. کدهای وضعیت جابجا می شوند. لایه های لبه نشت می کنند. اعتبارسنجی خیلی دیر اتفاق می افتد.
بخش ترسناک این نیست که این چیزها وجود دارند.
وقتی نگاه می کنید به سرعت ظاهر می شوند.
تفکیک کامل در اینجا:
https://rentgen.io/api-stories/amazon-profile-update-api-testing-case-study.html
اتوماسیون قبل از اتوماسیون وقتی هیچ آزمایشی ندارید اشکالات API را پیدا کنید.



