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 accessed | Access 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ínhlocation.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ủawindow
. - Hàm
replace
có thể được gọi giữa các domain khác nhau thông qua đối tượnglocation
. - Chúng ta có thể gọi một số hàm cross-domain chẳng hạn như
close
,blur
vàfocus
trên một cửa sổ mới. HàmpostMessage
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.
Related
list
from outgoing([[Port Swigger - Same-Origin Policy]])
sort file.ctime asc
Resources
Footnotes
-
xem thêm What’s the Difference Between a Site and an Origin? ↩
-
đ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. ↩