خطمشی همان مبدأ یک ویژگی امنیتی مرورگر است که نحوه تعامل اسناد و اسکریپتهای یک مبدأ با منابع منبع دیگر را محدود میکند.
یک مرورگر می تواند منابع را از چندین سایت به طور همزمان بارگیری و نمایش دهد. ممکن است چندین برگه همزمان باز داشته باشید، یا یک سایت میتواند چندین iframe را از سایتهای مختلف جاسازی کند. اگر هیچ محدودیتی در تعامل بین این منابع وجود نداشته باشد، و یک اسکریپت توسط یک مهاجم به خطر بیفتد، اسکریپت می تواند همه چیز را در مرورگر کاربر فاش کند.
خط مشی مبدأ یکسان با مسدود کردن دسترسی خواندن به منابع بارگیری شده از مبدأ متفاوت، از این اتفاق جلوگیری می کند. شما می گویید: «اما صبر کنید، من همیشه تصاویر و اسکریپت هایی را از منابع دیگر بارگذاری می کنم.» مرورگرها به چند تگ اجازه می دهند تا منابعی را از مبدأ متفاوت جاسازی کنند. این خطمشی عمدتاً یک مصنوع تاریخی است و میتواند سایت شما را در معرض آسیبپذیریهایی مانند کلیک جک با استفاده از iframes قرار دهد. میتوانید با استفاده از یک خطمشی امنیت محتوا، خواندن این تگها را محدود کنید.
چه چیزی یک منشاء در نظر گرفته می شود؟
مبدا توسط طرح (همچنین به عنوان پروتکل شناخته می شود، برای مثال HTTP یا HTTPS)، پورت (اگر مشخص شده باشد) و میزبان تعریف می شود. هنگامی که هر سه برای دو URL یکسان هستند، آنها با مبدا یکسان در نظر گرفته می شوند. به عنوان مثال، http://www.example.com/foo
همان مبدا http ://www.example.com/bar
است اما https ://www.example.com/bar
نیست زیرا طرح متفاوت است.
چه چیزی مجاز و چه چیزی مسدود شده است؟
به طور کلی، جاسازی یک منبع متقاطع مجاز است، در حالی که خواندن یک منبع متقاطع مسدود شده است.
iframes | تعبیه مبدا متقاطع معمولاً مجاز است (بسته به دستورالعمل X-Frame-Options )، اما خواندن متقاطع (مانند استفاده از جاوا اسکریپت برای دسترسی به سند در iframe) مجاز نیست. |
CSS | CSS متقاطع را می توان با استفاده از عنصر <link> یا یک @import در یک فایل CSS جاسازی کرد. ممکن است هدر Content-Type صحیح مورد نیاز باشد. |
تشکیل می دهد | URL های متقاطع را می توان به عنوان مقدار ویژگی action عناصر فرم استفاده کرد. یک برنامه وب می تواند داده های فرم را در یک مقصد متقاطع بنویسد. |
تصاویر | جاسازی تصاویر متقاطع مجاز است. با این حال، خواندن داده های تصویر متقاطع (مانند بازیابی داده های باینری از یک تصویر متقاطع با استفاده از جاوا اسکریپت) مسدود شده است. |
چند رسانه ای | با استفاده از عناصر <video> و <audio> میتوان ویدیو و صدا را با منبع متقابل جاسازی کرد. |
اسکریپت | اسکریپت های متقاطع را می توان جاسازی کرد. با این حال، دسترسی به API های خاص (مانند درخواست های واکشی متقابل) ممکن است مسدود شود. |
TODO: DevSite - ارزیابی فکر کنید و بررسی کنید
چگونه از Clickjacking جلوگیری کنیم
حمله ای به نام "clickjacking" یک سایت را در یک iframe
جاسازی می کند و دکمه های شفافی را که به مقصد دیگری پیوند می دهند، پوشش می دهد. کاربران فریب میخورند و فکر میکنند در حین ارسال دادهها برای مهاجمان به برنامه شما دسترسی دارند.
برای جلوگیری از تعبیه سایت شما در iframe توسط سایر سایت ها، یک خط مشی امنیتی محتوا با دستورالعمل frame-ancestors
به سربرگ های HTTP اضافه کنید.
از طرف دیگر، میتوانید X-Frame-Options
به سرصفحههای HTTP اضافه کنید تا لیست گزینهها را در MDN ببینید.
بسته شدن
امیدواریم از اینکه مرورگرها سخت کار می کنند تا دروازه بان امنیت وب باشند، کمی خیالتان راحت شده است. حتی اگر مرورگرها سعی می کنند با مسدود کردن دسترسی به منابع ایمن باشند، گاهی اوقات شما می خواهید به منابع متقاطع در برنامه های خود دسترسی پیدا کنید. در راهنمای بعدی، درباره اشتراکگذاری منابع متقاطع (CORS) و نحوه اطلاع رسانی به مرورگر که بارگیری منابع متقاطع از منابع قابل اعتماد مجاز است، بیاموزید.