بررسی سیاست منشأ یکسان (Same Origin Policy) و نقش آن در امنیت وب

در دنیای امروز که استفاده از برنامههای تحت وب بهطور فزایندهای در حال گسترش است، امنیت کاربران و دادههای آنها یکی از اصلیترین دغدغههای توسعهدهندگان و معماران سیستمهای نرمافزاری محسوب میشود. وبسایتها و برنامههای کاربردی مبتنی بر مرورگرها، بهصورت مداوم با اطلاعات حساس مانند کوکیها، توکنها، دادههای کاربری و تراکنشهای مالی سروکار دارند. در چنین محیطی، ایجاد محدودیتهایی برای ارتباط میان منابع مختلف از دامنههای گوناگون، امری ضروری است تا از نشت اطلاعات یا سوءاستفادههای احتمالی جلوگیری شود. یکی از مهمترین مکانیزمهایی که مرورگرهای وب برای حفاظت از حریم خصوصی و امنیت کاربر به کار میگیرند، سیاست منشأ یکسان یا Same Origin Policy (SOP) است.
سیاست منشأ یکسان یک قاعده امنیتی پایهای و بسیار مؤثر در مرورگرهاست که به اسکریپتهای بارگذاریشده از یک منشأ خاص تنها اجازه دسترسی به منابع همان منشأ را میدهد. این سیاست بهصورت خودکار توسط مرورگر اعمال میشود و از ارتباط و تعامل بدون مجوز بین دامنههای مختلف جلوگیری میکند. در واقع SOP بهعنوان یک خط دفاعی اولیه، مانع از اجرای حملات متداولی همچون Cross-Site Scripting (XSS) و Cross-Site Request Forgery (CSRF) میشود. در این مقاله تلاش میشود تا با بررسی دقیق ساختار و نحوه عملکرد SOP، اهمیت آن در امنیت وب روشن گردد و راهکارهایی که برای عبور کنترلشده از محدودیتهای آن استفاده میشود نیز مورد بررسی قرار گیرد.
تعریف سیاست منشأ یکسان (Same Origin Policy – SOP)
سیاست منشأ یکسان (Same Origin Policy یا به اختصار SOP) یک قانون امنیتی بنیادی در معماری مرورگرهای وب است که برای محافظت از اطلاعات حساس کاربران طراحی شده است. این سیاست مشخص میکند که اسکریپتهای اجراشده در یک صفحه وب تنها در صورتی مجاز به دسترسی به دادهها و منابع سایر صفحات هستند که هر دو صفحه دارای منشأ یکسان (Same Origin) باشند.
در SOP، منشأ یک سند (Origin) توسط سه مؤلفه اصلی تعیین میشود:
-
پروتکل (Scheme/Protocol): مانند
http
,https
,ftp
-
نام میزبان (Host): نام دامنه یا آدرس IP مانند
example.com
-
شماره پورت (Port): مانند
80
،443
یا هر پورت خاص دیگری
دو URL زمانی دارای منشأ یکسان هستند که هر سه مؤلفه فوق کاملاً با یکدیگر مطابقت داشته باشند.
مثالهایی از مقایسه منشأ:
URL A | URL B | هممنشأ هستند؟ | دلیل |
---|---|---|---|
https://example.com/page1 |
https://example.com/page2 |
✅ بله | هر سه مؤلفه یکسان است |
http://example.com |
https://example.com |
❌ خیر | تفاوت در پروتکل |
https://example.com |
https://sub.example.com |
❌ خیر | تفاوت در نام دامنه |
https://example.com:443 |
https://example.com:8443 |
❌ خیر | تفاوت در پورت |
اهمیت SOP در امنیت وب
سیاست منشأ یکسان (Same Origin Policy – SOP) یکی از حیاتیترین اصول امنیتی در دنیای وب محسوب میشود. بدون وجود این سیاست، مرورگرها نمیتوانستند بین کدهای اجرایی معتبر و مخرب تمایز قائل شوند و عملاً امکان محافظت از اطلاعات کاربران در برابر دسترسیهای ناخواسته از سوی وبسایتها یا اسکریپتهای دیگر وجود نداشت. SOP بهعنوان یک سد دفاعی قدرتمند، در جلوگیری از بسیاری از حملات رایج و سوءاستفادههای امنیتی در محیط مرورگر نقش غیرقابلانکاری دارد.
۱. جلوگیری از دسترسی غیرمجاز به دادههای کاربر
با استفاده از SOP، اسکریپتهای موجود در یک وبسایت نمیتوانند به اطلاعات وبسایتهای دیگر، مانند کوکیها، sessionStorage، localStorage، یا محتوای DOM آنها دسترسی پیدا کنند. بهعنوان مثال، اگر کاربر به حساب بانکی خود در سایت A وارد شده باشد، وبسایت مخربی در دامنه B نمیتواند از طریق جاوااسکریپت اطلاعات صفحه سایت A را بخواند یا دستکاری کند.
۲. جلوگیری از سرقت اعتبارنامهها و نشستها (Session Hijacking)
بسیاری از وبسایتها از کوکی برای نگهداری نشست (session) کاربر استفاده میکنند. اگر SOP وجود نداشت، هر وبسایت یا iframe مخربی میتوانست با ارسال درخواست به وبسایت مقصد و خواندن پاسخ آن، اطلاعات نشست کاربر را سرقت کرده و به حساب او دسترسی پیدا کند. SOP مانع از خواندن پاسخ این درخواستها توسط اسکریپتهای غیرهممنشأ میشود، حتی اگر مرورگر بهطور خودکار کوکیها را همراه درخواست ارسال کرده باشد.
۳. مقابله با حملات Cross-Site Scripting (XSS)
اگرچه SOP نمیتواند بهتنهایی مانع وقوع حملات XSS شود، اما در ترکیب با سیاستهای دیگر مانند CSP (Content Security Policy)، مانع از آن میشود که اسکریپتهای تزریقشده در یک سایت، به دادههای سایتهای دیگر دسترسی پیدا کنند. در واقع SOP سطح حمله XSS را به دامنه خودی محدود میکند.
۴. کاهش احتمال حملات Cross-Site Request Forgery (CSRF)
در حملات CSRF، مهاجم سعی میکند از طریق یک درخواست مخفی، عملیاتی را از طرف کاربر در یک سایت معتبر انجام دهد. هرچند که SOP مستقیماً جلوی ارسال این درخواستها را نمیگیرد، اما مانع خواندن پاسخ آن توسط اسکریپتهای غیرمجاز میشود. این بدان معناست که مهاجم نمیتواند نتایج حمله را تحلیل کرده یا از پاسخ سرور بهرهبرداری کند.
۵. محافظت از چارچوبهای Front-End
چارچوبهایی مانند React، Angular، Vue و دیگر فریمورکهای JavaScript بهشدت بر امنیت DOM و جداسازی دادهها تکیه دارند. SOP با محدودسازی ارتباط بین اسکریپتهای مختلف دامنهها، امکان اجرای امن و قابلپیشبینی کد در این چارچوبها را فراهم میسازد و از حملات پیچیدهتر جلوگیری میکند.
۶. زیربنای مکانیزمهای امنیتی پیشرفتهتر
سیاست منشأ یکسان بهعنوان پایهای برای سایر سیاستهای امنیتی مانند CORS (Cross-Origin Resource Sharing)، CSP (Content Security Policy)، و sandboxing عمل میکند. در واقع بسیاری از این فناوریها برای عملکرد صحیح و ایمن خود نیازمند پیادهسازی دقیق SOP در سطح مرورگر هستند.
SOP با اعمال محدودیت در ارتباط بین دامنهها، یکی از مهمترین ابزارهای دفاعی مرورگرها در برابر حملات وب بهشمار میرود. بدون این سیاست، محیط مرورگر به بستری ناامن تبدیل میشد که هر صفحهای میتوانست به اطلاعات حساس سایر صفحات دسترسی پیدا کند. توسعهدهندگان وب باید همواره از وجود این سیاست آگاه باشند و طراحیهای خود را بهگونهای انجام دهند که در تطابق با آن، امنیت و کارایی بهینهای حاصل شود.
نحوه عملکرد سیاست منشأ یکسان (Same Origin Policy)
سیاست منشأ یکسان (Same Origin Policy – SOP) بهصورت پیشفرض در تمام مرورگرهای مدرن فعال است و یکی از سازوکارهای امنیتی سطح مرورگر بهشمار میرود که مانع از تعامل آزادانه اسکریپتها یا درخواستها بین منابعی با منشأ متفاوت میشود. منظور از تعامل در اینجا، دسترسی خواندن یا نوشتن به دادهها و منابعی مانند DOM، کوکیها، محتوای پاسخ درخواستها، و سایر اجزای سمت کلاینت است.
در ادامه، نحوه عملکرد SOP در سناریوهای مختلف بررسی میشود:
۱. کنترل دسترسی جاوااسکریپت به منابع صفحات دیگر
مرورگرها هنگام اجرای اسکریپتهای جاوااسکریپت، منشأ فعلی صفحه را بهعنوان مرجع در نظر میگیرند. اگر اسکریپت بخواهد به دادهها یا اجزای صفحهای دیگر (مثلاً iframe) دسترسی پیدا کند، مرورگر منشأ هر دو صفحه را مقایسه میکند. اگر حتی یکی از سه مولفه (پروتکل، دامنه، پورت) متفاوت باشد، دسترسی مسدود میشود.
مثال:
<!-- صفحه اصلی --> <iframe src="https://othersite.com/data.html" id="myIframe"></iframe> <script> const iframe = document.getElementById('myIframe'); try { let data = iframe.contentWindow.document.body.innerText; } catch (err) { console.error("Access denied due to SOP"); } </script>
در مثال بالا، چون منشأ iframe با صفحه اصلی متفاوت است، جاوااسکریپت اجازه خواندن محتوای آن را ندارد.
۲. محدودسازی درخواستهای AJAX و Fetch
مرورگرها اجازه ارسال درخواست به دامنههای دیگر را از طریق XMLHttpRequest
یا fetch
میدهند، اما خواندن پاسخ آنها فقط در صورتی مجاز است که سرور مقصد صراحتاً مجوز دهد (با استفاده از CORS). در غیر این صورت، مرورگر پاسخ را مسدود کرده یا آن را خالی نگه میدارد.
مثال:
fetch("https://api.othersite.com/data") .then(res => res.text()) .then(data => console.log(data)) .catch(err => console.error("Blocked by SOP"));
اگر سرور api.othersite.com
هدرهای CORS را تنظیم نکرده باشد، مرورگر دسترسی به دادهها را مسدود میکند.
۳. ممانعت از دسترسی به کوکیها، localStorage و sessionStorage
کوکیها، localStorage
و sessionStorage
فقط در دسترس اسکریپتهایی هستند که از همان منشأ بارگذاری شدهاند. به این ترتیب، یک سایت نمیتواند کوکیهای سایت دیگر را بخواند یا تغییر دهد، حتی اگر در همان مرورگر باز شده باشد.
مثال:
// در دامنه example.com document.cookie = "token=abc123"; // فقط در همین دامنه در دسترس است // در دامنه attacker.com console.log(document.cookie); // این مقدار فقط کوکیهای دامنه attacker.com را نشان میدهد
4. محدودسازی دسترسی به DOM از طریق iframe
وقتی یک iframe با منشأ متفاوت در یک صفحه قرار میگیرد، اسکریپت صفحه میزبان نمیتواند به محتوای داخلی آن iframe دسترسی داشته باشد، و برعکس. این موضوع مانع از جاسوسی یا سرقت دادههای درون iframe میشود.
۵. تأثیر SOP بر فرمها و درخواستهای POST/GET
درخواستهای HTML معمولی مانند ارسال فرم به دامنه دیگر مجاز هستند، اما پاسخ این درخواستها نمیتواند توسط اسکریپت صفحه ارسالکننده خوانده شود، مگر اینکه سرور مقصد با CORS اجازه دهد. این ویژگی از سوءاستفاده در حملات Cross-Origin Data Theft جلوگیری میکند.
۶. رفتار مرورگر هنگام نقض SOP
اگر اسکریپت در تلاش باشد تا از قوانین SOP عبور کند (مثلاً با خواندن دادهای از دامنهای دیگر)، مرورگر یکی از واکنشهای زیر را نشان میدهد:
- Block Access: مسدودسازی کامل دسترسی
- Throw Security Exception: ایجاد خطای امنیتی در کنسول
- Empty Response: بازگرداندن پاسخ خالی (در برخی درخواستها)
SOP با کنترل دقیق سطح دسترسی بین منابع از منشأهای مختلف، یک لایه حفاظتی ضروری را در مرورگر فراهم میکند. این سیاست نهتنها از دسترسی ناخواسته بین دامنهها جلوگیری میکند، بلکه پایهای برای مکانیزمهای امنیتی دیگر مثل CORS، CSP، و Sandboxing محسوب میشود. فهم نحوه عملکرد SOP برای توسعهدهندگان وب بسیار مهم است، چرا که طراحی ایمن و عملکرد صحیح برنامههای تحت وب به آن وابسته است.
محدودیتهای SOP
اگرچه SOP یک مکانیزم امنیتی حیاتی است، اما در برخی موارد بیش از حد محدودکننده است، بهویژه برای وبسایتهایی که نیاز دارند از چند دامنه یا زیردامنه با هم تعامل داشته باشند.
برای حل این مشکل، روشهایی مانند موارد زیر توسعه داده شدهاند:
- Cross-Origin Resource Sharing (CORS): به سرورها اجازه میدهد به صورت انتخابی اجازه دسترسی به منابع از دیگر دامنهها را بدهند.
- document.domain: در برخی موارد، زیردامنهها میتوانند
document.domain
خود را به دامنه اصلی تغییر دهند تا به هم دسترسی پیدا کنند (ولی فقط در دامنههای مشابه). - PostMessage API: برای ارتباط امن بین صفحات با منشأ متفاوت، مرورگرها یک API به نام
window.postMessage()
ارائه میدهند. - JSONP: یک راهکار قدیمی برای انجام درخواستهای cross-origin از طریق تگ
<script>
(که تحت محدودیت SOP قرار نمیگیرد)، اما دیگر توصیه نمیشود.
روشهای دور زدن یا استفاده مخرب از SOP و راهکارهای مقابله با آن
با اینکه سیاست منشأ یکسان (Same Origin Policy – SOP) یکی از اصلیترین سدهای امنیتی مرورگر است، اما این سیاست نیز دارای محدودیتهایی است و مهاجمان میتوانند با تکنیکهایی خاص، بهطور غیرمستقیم از آن عبور کرده یا از ویژگیهای آن سوءاستفاده کنند. در این بخش، مهمترین روشهای شناختهشده برای دور زدن SOP، همراه با راهکارهای مؤثر جهت مقابله با آن بررسی میشود.
۱. حملات Cross-Site Scripting (XSS)
شرح:
در حملات XSS، مهاجم اسکریپت مخربی را در صفحات وب قابلاعتماد تزریق میکند. اگر این اسکریپت در همان منشأ اجرا شود، به منابع داخلی سایت مانند کوکیها، توکنها و اطلاعات حساس دسترسی خواهد داشت، بدون اینکه SOP بتواند جلوی آن را بگیرد، چون حمله از درون همان Origin انجام شده است.
راهکارها:
- استفاده از CSP (Content Security Policy) برای محدودسازی منابع اجرایی
- فیلتر و فرار دادن ورودیهای کاربر برای جلوگیری از تزریق کد
- استفاده از HTTPOnly برای کوکیها، تا از طریق جاوااسکریپت قابلخواندن نباشند
- اعتبارسنجی و پاکسازی سمت سرور
۲. حملات Cross-Site Request Forgery (CSRF)
شرح:
در CSRF، کاربر وارد سایت معتبری (مثل بانک) شده و نشست فعالی دارد. مهاجم کاربر را وادار میکند تا ناخواسته درخواستی (مثلاً انتقال پول) به آن سایت ارسال کند. SOP در این حالت فقط مانع خواندن پاسخ میشود، اما ارسال درخواست مشکلی ندارد.
راهکارها:
- استفاده از توکنهای CSRF برای اعتبارسنجی درخواستهای POST
- استفاده از SameSite Cookie Attributes برای محدودسازی ارسال کوکیها
- بررسی Origin یا Referer در هدرهای HTTP درخواست
۳. استفاده از JSONP
شرح:
JSONP یک روش قدیمی برای دور زدن محدودیتهای SOP بود که بهکمک تگ <script>
دادهها را از دامنههای دیگر بارگذاری میکرد. چون <script>
از محدودیت SOP پیروی نمیکند، مهاجمان میتوانند از JSONP برای دریافت اطلاعات از سرورهای آسیبپذیر استفاده کنند.
راهکارها:
- حذف پشتیبانی از JSONP و استفاده از CORS
- اعتبارسنجی دقیق پارامترهای callback در سمت سرور
- محدودسازی منابع اسکریپت فقط به دامنههای مجاز
۴. حملات Cross-Origin via PostMessage
شرح:
برخی وبسایتها برای تبادل پیام بین iframe یا پنجرههای بازشده از منشأهای مختلف از API به نام window.postMessage
استفاده میکنند. اگر دادههای ورودی به این پیامها بهدرستی اعتبارسنجی نشوند، مهاجم میتواند پیامهای جعلی ارسال کرده و دادههای حساس را دریافت کند.
راهکارها:
- بررسی دقیق منشأ (
event.origin
) پیامهای دریافتی - استفاده از
event.source
برای شناسایی فرستنده - تعیین و اعمال لیست منشأهای مجاز (whitelisting)
۵. Clickjacking
شرح:
در حمله Clickjacking، مهاجم یک صفحه معتبر را درون iframe قرار داده و آن را بهصورت نامرئی یا فریبنده در رابط کاربری خود نمایش میدهد. کاربر بدون آگاهی روی دکمههای آن صفحه کلیک میکند و عملیات ناخواسته انجام میشود. SOP نمیتواند جلوی این حمله را بگیرد چون کاربر عملاً در حال تعامل با همان منشأ است.
راهکارها:
- استفاده از X-Frame-Options: DENY یا SAMEORIGIN در هدر پاسخ HTTP
- استفاده از Content-Security-Policy: frame-ancestors ‘none’ برای محدودسازی نمایش iframe
- طراحی واسط کاربری مقاوم در برابر iframeهای تو در تو
۶. سرقت داده از طریق فایلهای باز (File Upload + SOP Abuse)
شرح:
اگر کاربر فایلی از منشأ خود در مرورگر باز کند (مثلاً از طریق file://
) و اسکریپتی در آن قرار گرفته باشد که به منابع اینترنتی دسترسی دارد، ممکن است دادهها فاش شود یا درخواستهای ناخواسته ارسال شود.
راهکارها:
- استفاده از sandbox برای پیشنمایش فایلها
- هشدار به کاربران برای باز نکردن فایلها مستقیماً از مرورگر
- غیرمجاز کردن اجرای اسکریپت در صفحات محلی (مثلاً با تنظیمات CSP)
۷. اشتباه در تنظیم CORS
شرح:
اگر سرور به اشتباه هدرهای CORS را طوری تنظیم کند که اجازه دسترسی به هر منشأیی را بدهد (مثلاً با Access-Control-Allow-Origin: *
)، عملاً SOP بیاثر میشود و هر سایتی میتواند دادههای حساس را بخواند.
راهکارها:
- فقط اجازه دسترسی به دامنههای معتبر و شناختهشده را بدهید
- از wildcard در دامنهها اجتناب کنید (بهویژه هنگام ارسال کوکی)
- بررسی و تست مداوم پیکربندی CORS
در حالی که SOP یکی از قدرتمندترین مکانیزمهای امنیتی مرورگر است، اما نمیتوان بهتنهایی برای امنیت کامل به آن اتکا کرد. مهاجمان اغلب از راههای غیرمستقیم، مانند تزریق اسکریپت یا فریب کاربر، برای دور زدن این سیاست استفاده میکنند. بنابراین توسعهدهندگان باید علاوه بر درک کامل SOP، از مکانیزمهای مکمل مانند CORS، CSP، توکنهای CSRF و تنظیمات کوکی امن استفاده کنند تا امنیت حداکثری در برنامههای تحت وب فراهم شود.
جمعبندی و نتیجهگیری
سیاست منشأ یکسان (Same Origin Policy – SOP) یکی از پایههای اصلی امنیت در معماری مرورگرهای مدرن است که بهمنظور محافظت از اطلاعات کاربران در برابر دسترسیهای غیرمجاز طراحی شده است. این سیاست با محدود کردن تعامل بین منابعی که از منشأهای متفاوت بارگذاری شدهاند، مانع سرقت دادهها، دستکاری محتوا و اجرای بسیاری از حملات مخرب مانند XSS، CSRF، و Clickjacking میشود.
با این حال، SOP بهتنهایی کافی نیست. این سیاست محدودیتهایی دارد و مهاجمان ممکن است با روشهای هوشمندانهای از جمله تزریق کد، جعل درخواست، یا پیکربندی نادرست سرور، از آن عبور کنند یا رفتار آن را دور بزنند. به همین دلیل، توسعهدهندگان وب باید SOP را بهعنوان یکی از اجزای اصلی یک رویکرد دفاع در عمق (Defense in Depth) در نظر بگیرند و از ابزارهای مکمل مانند:
- CORS (برای کنترل دسترسی بین دامنهای بهصورت امن)
- CSP (برای جلوگیری از اجرای اسکریپتهای غیرمجاز)
- SameSite cookies (برای محافظت در برابر CSRF)
- X-Frame-Options و frame-ancestors (برای مقابله با Clickjacking)
استفاده کنند.
در نهایت، امنیت وب مفهومی چندلایه است که نیازمند درک دقیق، پیادهسازی اصولی و نظارت مستمر است. سیاست منشأ یکسان اگرچه بسیار مهم و مؤثر است، اما باید در کنار سایر تدابیر امنیتی استفاده شود تا امنیت واقعی کاربران و دادهها در فضای وب تضمین گردد.
مطالب زیر را حتما بخوانید
-
تصاحب حساب کاربری (Account Takeover) چیست؟
46 بازدید
-
HSTS (HTTP Strict Transport Security) چیست؟
63 بازدید
-
ریورس پراکسی (Reverse Proxy) چیست؟
59 بازدید
-
آشنایی با OWASP راهکاری کامل برای امنیت نرمافزارهای وب
65 بازدید
-
بررسی جامع دوره WEB-200 شرکت OffSec: آموزش ارزیابی امنیتی برنامههای وب
182 بازدید
-
همه چیز درباره Sucuri: محافظت کامل از وبسایت در برابر تهدیدات سایبری
384 بازدید
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.