appsec – آیا یک خطای 401 از اطلاعات نشتی API باز می شود؟

من یک API برای یک برنامه کاربردی که در حال کار است را توسعه می دهم و یک سوال جالب مطرح می کنم:

یک نقطه پایانی API را اینگونه تصور کنید:

 GET / customers / 123456

که یک شی تک مشتری را باز می کند. در حال حاضر، در سازمان ما، مشتریان می توانند به سازمان های فروش تعلق داشته باشند. هر کاربر API با یک سازمان مرتبط است و می خواهم دسترسی کاربر به مشتریان مرتبط با سازمان خود را محدود کنم.

بنابراین، با توجه به یک کاربر متعلق به سازمان ABC و مشتری 123456 که متعلق به سازمان است XYZ ، چه API باید به من نشان دهد، زمانی که این کاربر تلاش می کند تا آن مشتری را دریافت کند؟

  • 404 Not Found – اگر یک کاربر یک مشتری غیر موجود را جستجو کند، آن را 404 باز می گرداند، زیرا هیچ منبع در آن URL پیدا نشد.

  • 401 غیر مجاز – اگر پرس و جو از یک منبع که شما دسترسی ندارید، باید پاسخ "غیر مجاز" دریافت کنید.

به نظر می رسد که اگر API برای اطلاعات غیرقابل دسترسی، API 401 غیر مجاز یا مشتری های موجود از سایر سازمان ها را پیدا کند و 404 یافت نشد برای مشتری های غیر موجود باشد. به عنوان مثال، یک کاربر از سازمان ABC می تواند API را پرس و جو کند و تعیین کند که کدام شناسه های کاربر وجود دارد و چه کسی نمی باشد.

یادداشت های اضافی:

  1. شناسه های مشتری به صورت پیوسته تولید می شوند و هیچ نوع شکاف وجود ندارد، بنابراین نوع اطلاعاتی که می تواند نشت باشد:

    • کدام مشتری کد بعدی خواهد بود؟
    • چگونه تعداد مشتریان در یک دوره زمانی ایجاد شد؟
  2. سازمان های فروش معمولا به مناطق جغرافیایی خاص محدود می شوند و معمولا در رقابت مستقیم نیستند. اما بعضی از سرزمینها همپوشانی دارند و قوانینی وجود دارد که به "شکار" کردن مشتریان یکدیگر کمک کند. بنابراین، همه چیز در همه، یک محیط رقابتی محکم است که ما واقعا نمی خواهیم سازمان های فروش را در مورد مشتریان یکدیگر بدانیم.

jwt – برنامه ی وب یک درخواست برای یک API REST زمانی که در حال تأیید صحت است

من تازه به ASP.NET هسته و OpenID اتصال / AzureAD، بنابراین من به دنبال برخی از اعتبار سنجی (و یا در غیر اینصورت) از رویکرد من است. خواندن / گوگلینگ گسترده در طول چند هفته گذشته در حالی که من در حال یادگیری این است که پاسخ دقیق نگرفته است (اگر چه بسیاری از تقریبا نادرست است)

من یک برنامه وب مبتنی بر مرورگر است که باید با آن امن AzureAD، به طوری که انتظار می رود، از این استفاده می کند. همه کارها خوب است.

همچنین یک API را در همان نرم افزار قرار می دهم. من نمیخواهم به علت نگرانی CSRF از کوکی استفاده کنم و نیاز به API برای سرویس دهی یک برنامه تلفن همراه در تاریخ بعدی است. من API را برای استفاده از JWT Bearer مبتنی بر auth پیکربندی کردم. همچنین به خوبی کار میکند (به عنوان مثال از پستمن درخواست میکند)

یکی از صفحات در برنامه وب نیاز به برقراری تماس AJAX به API دارد، و من نمیخواهم / باید برنامه را به یک SPA تبدیل کنم. بنابراین رویکردی که در حال حاضر در حال تلاش هستم این است:

وقتی وارد برنامه میشوم، حافظه (از طرف سرور) را از AzureAD دریافت میکنم. وقتی صفحه با تماس AJAX بازدید می شود، من "id_token" را به یک فیلد پنهان می نویسم و ​​هنگامی که نیاز به برقراری تماس AJAX دارم، خواندن id_token در جاوا اسکریپت و اضافه کردن آن به عنوان "مجوز" هدر.

این همه به عنوان یک رویا کار می کند، بنابراین من آن را نگران کرده ام و آن را نگران کرده ام. من نمی توانم مسائل CSRF را ببینم، چون تماس AJAX دیگر کوکی نیست. اگر چه من یک id_token را به صفحه می نویسم، کاربر باید کوکی ها را برای دیدن این صفحه در اولویت قرار دهد.

آیا چیزی است که من از آن چشم پوشی می کنم؟

حریم خصوصی – آیا فیس بوک اطلاعات برخی از اطلاعات حساس را با رمز دسترسی خاصی به اشتراک می گذارد؟ (API)

برخی از پیوندهای پیچیده را در نمودار فیس بوک پیدا کردم (https://graph.facebook.com) بنابراین می خواهم بدانم این درست است یا خیر

 https://graph.facebook.com/ {{ شناسه کاربر}} / {{درخواست داده}}

سپس سعی می کنیم برخی از درخواست های تقلبی را از آدرس فیس بوک فیس بوک دریافت کنیم.
(https://graph.facebook.com/100006573608740/fakedatarequest)

 {
"خطا": {
  "message": "اجزای مسیر نامشخص: / fakedatarequest"
  "نوع": "OAuthException"،
  "کد": 2500،
  "fbtrace_id": "DHYU01dQVZw"
}
}

بنابراین اکنون میخواهم برخی از اطلاعات حساس را با استفاده از نشانی اینترنتی گراف، درخواست کنم.
(https://graph.facebook.com/100006573608740/payments؛ https://graph.facebook.com/100006573608740/admins)
اکنون من خطایی خواهم کرد،

 {
"خطا": {
  "message": "یک درخواست دسترسی برای درخواست این منبع لازم است."
  "نوع": "OAuthException"،
  "کد": 104،
  "fbtrace_id": "C6Nql + 1gf + 2"
 }
}

این چیست؟ چگونه می توانیم علامت دسترسی را برای بررسی اطلاعات مانند آن اضافه کنیم؟

تأیید اعتبار – API برنامه تلفن همراه با استفاده از UDID و Argon2

من سعی میکنم یک برنامه iOS ایجاد کنم، این کد و همه را نوشتم، و در حال حاضر API هایی را برای برقراری ارتباط با پایگاه داده در اختیار دارم.

  • برنامه با استفاده از HTTPS و درخواستهای POST برای برقراری ارتباط با API استفاده می کند.
  • رمزهای عبور با استفاده از الگوریتم Argon2 هچ شده اند.
  • گزینه های ورود به سیستم 3rd party وجود ندارد (فیس بوک، G + و غیره)

در حالی که من API ها را پیاده سازی می کردم متوجه شدم که کاربر می تواند یک کاربر دیگر را جعل کند، اعتقاد دارد که هیچ هویت هویتی وجود ندارد، من ایده ی ID Auth را مطرح کردم و می خواهم ببینیم چقدر کارآمد است.

  • ایده: هر بار کاربر ورود به برنامه، برنامه UDID را دریافت می کند و آن را به API ارسال می کند و API آن را با استفاده از الگوریتم مشابه (Argon2) هش کرده و آن را در پایگاه داده ذخیره می کند، زمانی که کاربر سعی می کند انجام دهد، برای مثال، تغییر نام و یا ارسال یک پیام به یک کاربر دیگر، برنامه UDID را به API ارسال خواهد کرد تا هویت کاربر را تأیید کند، در صورت وجود، سپس اقدام انجام خواهد شد.

آیا امن است؟ اگر نه، چگونه می توانم آن را بهبود دهم، یا آنچه باید انجام دهم؟