1.SOP (chính sách cùng nguồn gốc) là gì?
Là một cơ chế bảo mật trình duyệt web nhằm ngăn chặn các trang web tấn công lẫn nhau.
Chính sách cùng nguồn gốc hạn chế các tập lệnh trên một nguồn truy cập dữ liệu từ nguồn khác. Nguồn gốc bao gồm sơ đồ URI, tên miền và số cổng. Ví dụ: hãy xem xét URL sau:
http://normal-website.com/example/example.html
Điều này sử dụng lược đồ http, tên miền normal-website.com và số cổng 80.

2.Tại sao chính sách cùng nguồn gốc (SOP) lại cần thiết?
Khi trình duyệt gửi yêu cầu HTTP từ nguồn này sang nguồn khác, mọi cookie, kể cả cookie phiên xác thực, có liên quan đến miền khác cũng được gửi như một phần của yêu cầu. Điều này có nghĩa là phản hồi sẽ được tạo trong phiên của người dùng và bao gồm mọi dữ liệu liên quan dành riêng cho người dùng. Nếu không có chính sách cùng nguồn gốc, nếu bạn truy cập một trang web độc hại, nó sẽ có thể đọc email của bạn từ Gmail, tin nhắn riêng tư từ Facebook, v.v.
3.Chính sách cùng nguồn gốc (SOP) được thực hiện như thế nào?
Chính sách cùng nguồn gốc thường kiểm soát quyền truy cập mà mã JavaScript có đối với nội dung được tải trên nhiều miền. Việc tải tài nguyên trang từ nhiều nguồn gốc thường được cho phép. Ví dụ: SOP cho phép nhúng hình ảnh qua<img>thẻ, phương tiện qua <video>thẻ và bao gồm JavaScript với <script>thẻ. Tuy nhiên, mặc dù trang có thể tải các tài nguyên bên ngoài này nhưng mọi JavaScript trên trang sẽ không thể đọc được nội dung của các tài nguyên này.
Có nhiều trường hợp ngoại lệ đối với chính sách cùng nguồn gốc:
- Một số đối tượng có thể ghi nhưng không thể đọc được trên nhiều miền, chẳng hạn như
locationđối tượng hoặclocation.hrefthuộc tính từ iframe hoặc cửa sổ mới. - Một số đối tượng có thể đọc được nhưng không thể ghi trong nhiều miền, chẳng hạn như
lengththuộc tính củawindowđối tượng (lưu trữ số lượng khung được sử dụng trên trang) và thuộcclosedtính. - Hàm này
replacethường có thể được gọi là tên miền chéo trênlocationđối tượng. - Bạn có thể gọi một số chức năng nhất định là tên miền chéo. Ví dụ: bạn có thể gọi các hàm
closevàblurtrênfocusmột cửa sổ mới. Chức năng nàypostMessagecũng có thể được gọi trên iframe và cửa sổ mới để gửi tin nhắn từ miền này sang miền khác
HttpOnly .
Có thể nới lỏng chính sách cùng nguồn gốc bằng cách sử dụng document.domain. Thuộc tính đặc biệt này cho phép bạn nới lỏng SOP cho một miền cụ thể nhưng chỉ khi đó là một phần của FQDN (tên miền đủ điều kiện) của bạn. Ví dụ: bạn có thể có một tên miền marketing.example.com và bạn muốn đọc nội dung của tên miền đó trên example.com. Để làm như vậy, cả hai miền cần được đặt document.domainthành example.com. Sau đó SOP sẽ cho phép truy cập giữa hai miền mặc dù nguồn gốc của chúng khác nhau. Trước đây, người ta có thể đặt document.domainthành một TLD chẳng hạn như com, cho phép truy cập giữa bất kỳ tên miền nào trên cùng một TLD, nhưng hiện nay các trình duyệt hiện đại đã ngăn chặn điều này. 