ویرگول
ورودثبت نام
آرش محمودی
آرش محمودی
خواندن ۸ دقیقه·۱ سال پیش

بررسی مفهوم same origin policy(SOP) به زبان ساده

با سلام و درود خدمت شما خواننده عزیز در این مقاله به بررسی SOP میپردازیم تا ببینیم SOP چیه و به چه کاری میاد

اصلا SOP چی هست؟

در واقع (SOP) یک اصل اساسی در امنیت وب هست که از وب سایت ها در برابر حملات سایبری محافظت می کند. SOP بیان می کنه که یک وب سایت نمی تواند به منابع یک وب سایت دیگر که از origin متفاوتی برخوردار است دسترسی داشته باشد و این شامل کوکی ها، فایل ها و سایر داده ها می شود. SOP به عنوان یک مکانیسم محافظت از منابع در نظر گرفته می شود

برای مثال فرض کنید سایت "example.com" را داریم که داده‌های حساس کاربران خود را نگه می‌دارد ;این داده ها نمایش داده نمیشوند تا زمانی که کاربر وارد سایت شود. از سوی دیگر، فردی با نیت بد می‌خواهد از طریق یک سایتی به نام "hacker.com" به اطلاعات کاربران "example.com" دسترسی پیدا کند.

بدون وجود Same-Origin Policy، این حمله به سادگی ممکن بود. اما SOP اجازه این دسترسی را نمی‌دهد. زیرا SOP می‌گوید که یک صفحه وب (یا برنامه‌ای که از طریق وب اجرا می‌شود) تنها به داده‌هایی از منبع (Origin) مشخصی دسترسی دارد.

در این مثال، اگر سایت "hacker.com" تلاش کند تا به داده‌های "example.com" دسترسی پیدا کند، مرورگر با استفاده از Same-Origin Policy این درخواست را مسدود می‌کند، زیرا منبع درخواست ("hacker.com") با منبع مجوز داده شده مقصد که ("example.com") قرار گرفته متفاوت است.

این سیاست امنیتی اجازه دسترسی به داده‌ها و منابع وب فقط از یک منبع مشخص را می‌دهد و از حملاتی مانند Cross-Site Request Forgery (CSRF) و Cross-Site Scripting (XSS) جلوگیری می‌کند.

Introduction:

وب سایت ها مجموعه ای از منابع هستند که شامل HTML، CSS، JavaScript و سایر داده ها میباشند. این منابع می توانند از origin های مختلفی سرچشمه بگیرند.

اوریجین (origin) به عنوان ترکیبی از :

URL(URL Scheme) (Protocol)

(Host)

(port)

تعریف میشود.

برای مثال در سایت https://www.immunefi.com پروتوکل https و هاست www.immunefi.com و پورت هم که پورت دیفالت یعنی (80) میباشد (به عکس زیر دقت کنید)


حالا در اینجا اوریجین پالیسی https://immunefi.com با http://immunefi.com به دلیل URL Scheme یا همون پروتکل متفاوت هست و همچنین اوریجین https://immunefi.com با https://hello.immunefi.com به علت Host متفاوت هست و قضیه پورت هم که اگر پورت خاصی تعریف نشده باشه به صورت دیفالت میره رو 80 (اگر پورت هم متفاوت باشه بازم اوریجینش متفاوت میشه)

برای دیدن origin هم میتونی از این 2 دستور استفاده کنی, در بخش کنسول المنت مرورگر ,

یا میتونی الرت کنی alert(origin) یا لاگ کنی console.log(origin)

براس مثال به عکس زیر توجه کنید :

اس او پی(SOP) بیان می کنه که یک وب سایت نمی تواند به منابع یک وب سایت دیگر که از origin متفاوتی برخوردار است دسترسی داشته باشد و این شامل کوکی ها، فایل ها و سایر داده ها می شود. SOP به عنوان یک مکانیسم محافظت از منابع در نظر گرفته می شود و به جلوگیری از حملات سایبری کمک می کند یا به بیان دیگر "یک مرورگر وب به اسکریپت‌های موجود در یک صفحه وب اجازه می‌دهد تا به داده‌های موجود در یک صفحه وب دیگر دسترسی پیدا کنند، اما تنها در صورتی که هر دو صفحه وب دارای منشأ (origin) یکسان باشند."

How SOP works:

اس او پی در مرورگر اجرا می شود. وقتی که یک کاربر یک وب سایت را باز می کند، مرورگر origin آن را بررسی می کند. اگر سرچشمه (origin) وب سایت با وب سایت دیگری که کاربر اخیراً بازدید کرده است متفاوت باشد، SOP از دسترسی وب سایت به منابع آن وب سایت جلوگیری می کند.

اس او پی از چندین مکانیسم برای جلوگیری از دسترسی به منابع استفاده می کند. یکی از این مکانیسم ها استفاده از کوکی ها هست. کوکی ها فایل های کوچکی هستند که توسط وب سایت ها در کامپیوتر فرد ذخیره می شوند. SOP از کوکی ها برای شناسایی منابعی که یک وب سایت می تواند به آنها دسترسی داشته باشد استفاده می کند.

مکانیسم دیگری که SOP از آن استفاده می کند، استفاده از CORS است. CORS یک پروتکل است که به وب سایت ها اجازه می دهد تا از منابع وب سایت های دیگر استفاده کنند. SOP از CORS برای محدود کردن دسترسی وب سایت ها به منابع وب سایت های دیگر استفاده می کند

How SOP protects web sites:

اس او پی به محافظت از وب سایت ها در برابر حملات سایبری کمک می کند. این شامل حملات تزریق کد مثل (xssو ...)، سرقت هویت و سایر حملات می شود.

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

حملات سرقت هویت( session stealing) زمانی اتفاق می افتد که یک مهاجم اطلاعات شخصی کاربر را مانند نام کاربری، رمز عبور یا شماره کارت اعتباری را سرقت می کند. این اطلاعات می تواند برای دسترسی به حساب های کاربر یا انجام خریدهای غیرمجاز استفاده شود.

مثلا فرض کنید که در بانکی حسابی دارید حالا میخواهید وارد پنل کاربریتون تو سایت بانک بشید این وسط هم یه هکری هست که بدش نمیاد یه دیدی به پنلتون بزنه و یه سری اطلاعات بدست بیاره حالا این هکره میاد یه صفحه ای میسازه و شمارو یجوری گول میزنه که وارد اون لینک بشید وقتی که وارد شدید به بعضی از اطلاعاتتون دسترسی پیدا میکنه

پس SOP از این حملات با محدود کردن دسترسی وب سایت ها به منابع یکدیگر جلوگیری می کند.


Exceptions to SOP limitations:


1. window.locator

یک سند(document) می‌تواند همیشه ویژگی مکانی یک داکیومنت دیگر را تغییر دهد. شیء می‌تواند برای دریافت آدرس صفحه فعلی (URL) و هدایت مرورگر به یک صفحه جدید استفاده شود." دو داکیومنت را در مرورگر خودتان در نظر بگیرید که دارای ارتباط موجودی است (به عبارت دیگر، داکیومنت اول از طریق یک iframe شامل داکیومنت دوم می‌شود، یا داکیومنت دوم توسط داکیومنت اول با استفاده از window.open باز شده است). هر داکیومنت می‌تواند ویژگی مکانی داکیومنت دیگر را تغییر دهد، اما نمی‌تواند آن را بخواند، به استثنای حالتی که دو داکیومنت دارای منشأ (origin)یکسان باشند. این به این معناست که ویژگی مکانی همیشه قابل تغییر است، با وجود سیاست منشأ یکسان که تعیین می‌کند آیا می‌توان یک داکیومنت جدید را بارگذاری کرد یا خیر.

حالا فرض کنید داکیومنت زیر را داریم:

https://www.hello.site/index.html


در داکیومنت index.html دستورالعمل جاوا اسکریپت زیر با موفقیت اجرا میشود:

یک داکیومنت می‌تواند همیشه ویژگی مکانی یک داکیومنت دیگر را اپدیت کند، درصورتی که آن‌ها ارتباطی با یکدیگر داشته باشند. ارتباطات معمول عبارتند از: یک داکیومنت از طریق عنصر iframe در داخل یک داکیومنت دیگر جاسازی شده باشد، یک داکیومنت توسط داکیومنت دیگر از طریق واسط برنامه‌نویسی دامنه DOM با استفاده از window.open باز شده باشد. بیایید به برخی از مثال‌های معمول نگاهی بیندازیم.

یک داکیومنت X که توسط یک داکیومنت دیگر Y از طریق یک iframe جایگذاری شده است، همیشه می‌تواند مکان داکیومنت Y را تغییر دهد.


یک داکیومنت X که توسط داکیومنت Y از طریق واسط برنامه‌نویسی دامنه DOM window.open باز شده است، همیشه می‌تواند مکان داکیومنت Y را تغییر دهد:


2.document.domain

یک استثناء مهم دیگر مربوط به ویژگی DOM هست به نام document.domain این ویژگی بخش دامنه‌ای از منشأ داکیومنت فعلی را توصیف می‌کند.

داکیومنتی مثل URL زیر:

http://subdomain.domain.com/index.html

ویژگی document.domain تنظیم شده به:

subdomain.domain.com

این ویژگی قابل تغییر است. یک داکیومنت می‌تواند ویژگی document.domain خود را به یک سطح بالاتر در سلسله مراتب دامنه به‌روز کند، به‌جز سطح بالایی (برای مثال .com).

دامنه سطح دوم (به عنوان مثال domain.com) می‌تواند مشخص شود اما نمی‌تواند تغییر کند (به عنوان مثال از domain.com به whitehouse.gov).

با تغییر ویژگی document.domain، یک داکیومنت منشأ خود را جزئی تغییر می‌دهد.

بیایید فرض کنیم یک داکیومنت با آدرس وب:

http:// a .hello.site/index.html

از طریق یک iframe، داکیومنت دیگری از منشأ متفاوتی جایگذاری شده است.

http:// b .hello.site/home.html

به دلیل سیاست منشأ یکسان (SOP)، کد JavaScript اجرا شده از زمینه داکیومنت اصلی نمی‌تواند از طریق JavaScript به محتوای iframe دسترسی داشته باشد، زیرا دو داکیومنت منشأ‌های متفاوتی دارند

با این وجود، اگر کد JavaScript زیر توسط هر دو داکیومنت اجرا شود، سیاست منشأ یکسان (SOP) دور زده می‌شود:

document.domain = "hello.site";

با این روش، دو داکیومنت می‌توانند به عنوان دارنده origin یکسان در نظر گرفته شوند.

3. Cross Window messaging

ویژگی جدید HTML5 به نام "پیام‌رسانی متقابل پنجره‌ای" یا همون "Cross Window messaging" به اسناد مختلف (iframes، پنجره‌های Popup، پنجره فعلی) اجازه می‌دهد که بدون توجه به سیاست منشأ یکسان، از یک مکانیزم همگام ساده برای ارتباط با یکدیگر استفاده کنند.

4. Cross Origin Resource Sharing (CORS)

اشتراک منابع از منشأ متفاوت (Cross-Origin Resource Sharing یا CORS) مجموعه‌ای از مشخصات است که برای اجازه دادن به مرورگر برای دسترسی به برخی منابع از طریق عبور از سیاست منشأ یکسان ایجاد شده است. معماری CORS از سرآمد‌های پاسخ HTTP سفارشی استفاده می‌کند و به اجزای سمت سرور یا زبان‌های اسکریپت نویسی سمت سرور وابسته است.

Conclusion:

پس نتیجه میگیریم که SOP یک اصل اساسی در امنیت وب هست که از وب سایت ها در برابر حملات امنیتی محافظت می کند و به عنوان یک مکانیسم محافظت از منابع در نظر گرفته می شود که به جلوگیری از حملات تزریق کد، سرقت هویت و سایر حملات کمک می کند.

خب امیدوارم که از این مقاله خوشتون اومده باشه تا مطالبی دیگر بدرود....

وب سایتWeb_Securitysopweb
علاقه مند به امنیت
شاید از این پست‌ها خوشتان بیاید