وب سایت ها – دریافت سردرگمی که این پاسخ نشان دهنده آسیب پذیری CORS

 HTTP / 1.1 200 OK
نوع محتوا: application / json
محتوای طول: 12
اتصال: نزدیک است
تاریخ: Tue، 25 Sep 2018 12:59:56 GMT
x-amzn-RequestId: xxxxxxxxxxx
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type، Authorization، Accept، X-Amz-
تاریخ، X-Api-Key، X-Amz-Security Token، x-client-type، x-client-version، x-
ناشناس شناسه
x-amz-apigw-id: xxxxxx
X-Amzn-Trace-Id: Root = xxxxxxxxx؛ Sampled = 0
X-Cache: خانم از روی ابر
از طریق: 1.1 xxxxxxxxxxxxxx
X-Amz-Cf-Id: xxxxxxxxxxxxxx

{"ok": true}

اشتباه می گیرم که این پاسخ آسیب پذیری CORS را نشان می دهد.

هنگامی که درخواست را ارسال می کنم، Origin: evil.com را تغییر دادم و سپس پاسخ فوق را تغییر دادم.

آیا کسی می تواند به من بگوید که آیا این پاسخ آسیب پذیری CORS را نشان می دهد؟

http – چه حزبی محافظت نشده است با CORS غیر فعال نیست؟

در اینجا چیزی است که من در مورد CORS می دانم: این اجازه می دهد تا شما به دسترسی به داده ها در دامنه دیگری از ظاهر هر وب سایت دیگر، تا زمانی که اموال access-control-allowed-origin دستگاه که داده ها را خدمت می کند.

نرم افزار دسکتاپ می تواند داده ها را از هر وب سایت بیرون بکشد و آنچه را که با آن انتخاب می کند، انجام دهد، اما مرورگرهای وب به طور خاص از گرفتن اطلاعات از حوزه های مختلف محدود نمی شوند. ] بنابراین، عدم دسترسی به cors در حفاظت از سرور از خدمت به سایت اشتباه است، و یا از مرورگر جلو در برخی از راه محافظت می کند؟

کوکی ها – حفاظت CSRF برای درخواست های GET مورد نیاز است

یک API REST دارم که اجازه می دهد تا کاربران تأیید اعتبار اطلاعات خود را در مورد حساب خودشان بخوانند و تغییرات را در حساب هایشان انجام دهند. برای احراز هویت، از JWT ها به عنوان کوکی های httpOnly ذخیره می شود. برای محافظت در برابر حملات CSRF، API REST همچنین مشتری را با آنچه زاویه ای نامیده می شود، نشان می دهد "XSRF token"

روش زاویه ای برای محافظت از CSRF این است که علامت XSRF را برای API شما ایجاد و دوباره آن را به API ارسال نماید هر درخواست در هدر "X-XSRF-Token". این به API شما بستگی دارد تا تعیین کند که آیا درخواست مجاز باشد یا نه. یک اسکریپت که در یک وبسایت خصمانه اجرا می شود، به نشانه XSRF دسترسی نخواهد داشت و بنابراین نمی تواند آن را همراه با درخواست های CSRF ارسال کند.

وقتی برای اجرای درخواست های اولیه خود در Angular با استفاده از HttpClient رفتم متوجه شدم که HttpXsrfInterceptor هدر X-XSRF-Token را با درخواستهای GET و HEAD ارسال نمی کند.

از نظرات من آنلاین خواندن، حفاظت از CSRF برای درخواست های GET مورد نیاز نیست زیرا آنها نمی کنند (یا نباید آنها را ) هر گونه اطلاعات را تغییر دهید بیشترین حمله یک حمله CSRF با یک درخواست GET می تواند REST API ارسال اطلاعات حساس به مرورگر وب کاربر باشد. وب سایت خصمانه نمیتواند این اطلاعات را ببیند.

اگر یک وبسایت خصمانه سعی کند یک درخواست CSRF GET مانند این


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

اگر یک وب سایت خصمانه سعی کند یک درخواست CSRF POST مانند این


را صادر کند ...

پس از آن وب سایت خصمانه هنوز هیچ اطلاعاتی را نمی بیند، اما هنوز هم می تواند به یک کاربر آسیب برساند. اگر API نیازمند هدر X-XSRF-Token باشد، این حمله نمی تواند موفقیت آمیز باشد.

اما اگر وب سایت خصمانه مرورگر را مجبور به درخواست GET می کند مانند:


بعضی از سیاست های CORS این را متوقف می کنند، اما سایر سیاست های CORS همچنان این اتفاق می افتد.

به نظر می رسد که نیاز به حفاظت CSRF در درخواست های GET، این آسیب پذیری را کاهش می دهد.

آیا چیزی مهم را از دست می دهم؟

چگونه وب سایت های پروکسی CORS کار می کنند؟

در حالی که من در حال توسعه سمت جلویی پروژه وب من بودم (من از چارچوب Angular 6 استفاده می کنم)، خطای حفاظت CORS را دریافت کردم (جای تعجب نیست که پروژه من در انتهای پروژه منسجم نیست). پس از چند جستجوی در مورد چگونگی محافظت از CORS، من برخی از وب سایت های پروکسی را پیدا کردم.

من نمی خواهم نام وب سایت ها را ذکر کنم، اما معمولا در این فرمت کار می کنند؛

 https: // acorsproxywebsite / https: / /google.com

هنگامی که درخواست را ارسال می کردم، قادر به ارسال درخواست GET شدم و پاسخ از هر وب سایت غیر فعال CORS دریافت کردم.

بنابراین، سوال من این است: چگونه وب سایت های پروکسی CORS می توانند از محافظت عبور کنند و پاسخ از هر گونه منابع متقابل؟ آیا امکان ساخت یک ساختار مشابه وجود دارد تا من بتوانم محافظت از CORS را از قسمت جلو من دور کنم؟