Definition of an Origin

Một origin sẽ bao gồm scheme, domain và port number1. Ví dụ:

http://normal-website.com

URL trên có scheme là http, domain là normal-website.com và port là 80 (được suy ra từ scheme http).

What is the Same-Origin Policy?

Là một cơ chế bảo mật của trình duyệt giúp giới hạn các document và script ở một origin truy cập vào các tài nguyên của origin khác.

Bảng sau sẽ cho thấy cách mà same-origin policiy được áp dụng nếu nội dung trong http://normal-website.com/example/example.html truy cập đến các URL khác:

URL accessedAccess permitted?
http://normal-website.com/example/Yes: same scheme, domain, and port
http://normal-website.com/example2/Yes: same scheme, domain, and port
https://normal-website.com/example/No: different scheme and port
http://en.normal-website.com/example/No: different domain
http://www.normal-website.com/example/No: different domain
http://normal-website.com:8080/example/No: different port*

How is the Same-Origin Policy Implemented?

SOP thường kiểm soát quyền truy cập của code JavaScript đến tài nguyên ở trên các origin khác.

Tuy nhiên, việc nạp tài nguyên của trang từ các nguồn cross-origin thì được phép. Ví dụ, SOP cho phép nhúng ảnh thông qua thẻ <img>, media thông qua thẻ <video> và JavaScript thông qua thẻ <script>.

Có một số ngoại lệ của SOP:

  • Một số object chỉ được phép ghi nhưng không được phép đọc giữa các domain chẳng hạn như location và thuộc tính location.href từ các iframe hoặc cửa sổ mới.
  • Một số object chỉ được phép đọc nhưng không thể ghi giữa các domain khác nhau chẳng hạn như thuộc tính length (lưu số lượng iframe đang được sử dụng trong trang) và closed của window.
  • Hàm replace có thể được gọi giữa các domain khác nhau thông qua đối tượng location.
  • Chúng ta có thể gọi một số hàm cross-domain chẳng hạn như close, blurfocus trên một cửa sổ mới. Hàm postMessage cũng có thể được gọi trong một iframe hoặc cửa sổ mới.

Do một số yêu cầu cũ, SOP đã được nới lỏng đối với cookie. Cụ thể, cookie có thể được truy cập bởi tất cả các subdomain mặc dù mỗi subdomain theo lý thuyết thì đều là cross-origin2. Chúng ta có thể ngăn chặn điều này bằng cách dùng attribute HttpOnly cho cookie.

Cũng có thể nới lỏng SOP sử dụng document.domain. Ví dụ, nếu ta có domain marketing.example.com và ta muốn nội dung trên đó có thể truy cập đến tài nguyên trên example.com thì có thể set document.domain ở cả hai domain thành example.com. Trong quá khứ, thậm chí chúng ta cũng có thể set document.domain thành com để truy cập đến tất cả các domain mà có cùng TLD. Tuy nhiên, các trình duyệt hiện đại đã ngăn chặn điều này.

list
from outgoing([[Port Swigger - Same-Origin Policy]])
sort file.ctime asc

Resources

Footnotes

  1. xem thêm What’s the Difference Between a Site and an Origin?

  2. điều này có thể giúp bypass thuộc tính SameSite nhằm thực hiện tấn công CSRF. Xem thêm Bypassing SameSite Restrictions via Vulnerable Sibling Domains.