2009-07-11 9 views
19

Có một trường hợp cạnh rất cụ thể trong chính sách tên miền chéo liên quan đến đối tượng window.top.Location ...IFrame chính xác có thể làm gì với đối tượng trên cùng.Location (tên miền chéo)?

Giả sử tôi có IFrame A, trong tên miền www.bbb.com, sống bên trong một trang trong miền www.aaa.com.

Các trang bên trong IFrame có thể:

  • Hãy so sánh window.top.location để window.location (để phát hiện xem nó đang được đóng khung)
  • Gọi window.top.location.replace (window.location) để chuyển hướng đến tự
  • Gọi window.top.location.replace ("bất kỳ chuỗi tùy ý") để chuyển hướng một nơi khác

Nhưng nó không thể:

  • Alert, document.write, hoặc làm bất kỳ loại sản phẩm của window.top.location.href
  • CONCATENATE nó trong bất kỳ biến khác, hoặc sử dụng nó trong bất kỳ cách nào hữu ích
  • Gọi window.top.location .reload()

Đây chỉ là những thứ tôi có thể nhanh chóng tìm thấy. Tôi chắc chắn có những trường hợp cạnh khác.
Nó có vẻ như trình duyệt không cho phép việc sử dụng các đối tượng top.location nếu đầu là trong phạm vi khác, trừ cho một vài điều trong danh sách trắng ...

Đây có phải là tài liệu ở đâu không?
Tôi có thể tìm thấy những thứ thuộc danh sách trắng này không?
Đây có phải là tiêu chuẩn HTML và được triển khai như nhau trong tất cả các trình duyệt không? Hoặc là việc thực hiện bán ngẫu nhiên này?

+1

nếu bạn tìm thấy câu trả lời, đặc biệt là "được tài liệu này ở bất cứ nơi nào", vui lòng đăng nó. Tôi đã phải làm việc với các hạn chế bảo mật miền chéo của IE trong quá khứ, và nó luôn luôn có vẻ là học được kiến ​​thức về những gì bạn có thể và không thể làm. Tôi chưa từng thấy bất kỳ tài liệu nào. –

+0

Chắc chắn, nhưng tôi đã không tìm thấy bất cứ điều gì cho đến nay (do đó câu hỏi ở đây) –

Trả lời

6

Quy tắc bảo mật khác với phiên bản trình duyệt. Nói chung các phiên bản mới hơn có quy tắc nghiêm ngặt hơn, nhưng cũng được điều chỉnh tốt hơn.

Tôi nghi ngờ rằng các trình duyệt cũ sẽ tự do cho phép bạn truy cập đối tượng vị trí của khung trên cùng, một trình duyệt mới hơn sẽ phủ nhận hoàn toàn và phiên bản hiện tại cho phép bạn so sánh các đối tượng vị trí nhưng không đọc chúng.

Bạn có thể tìm thấy tài liệu về điều này, nhưng nó sẽ cụ thể cho từng trình duyệt và dành riêng cho từng phiên bản của trình duyệt. Theo tôi biết, không có tiêu chuẩn thực sự cho việc này. Mỗi nhà cung cấp trình duyệt cố gắng bảo vệ người dùng càng nhiều càng tốt, trong khi vẫn giữ một số khả năng sử dụng cho trình tạo trang web. Nói chung bạn không thể thực sự cho rằng bất kỳ thứ gì gần biên giới hoạt động trong tất cả các trình duyệt, hoặc nó sẽ tiếp tục hoạt động trong các phiên bản sau.

+1

Bạn có ý nghĩa gì bởi "so sánh các đối tượng vị trí nhưng không đọc từ chúng"? Làm cách nào để trang nhúng có thể so sánh vị trí của trang mà không thể * biết * url của trang trên cùng? – Pacerier

+1

@Pacerier: Vì thuộc tính location là một đối tượng, chứa URL của trang là thuộc tính 'href'. Bạn có thể so sánh các đối tượng vị trí ngay cả khi chúng chứa URL từ một tên miền khác, nhưng bạn không thể đọc thuộc tính 'href' từ đối tượng vị trí khi URL từ một miền khác. – Guffa

+0

Cảm ơn bạn đã làm rõ =) Một số cách được biết để vượt qua hạn chế này và nhận được url của "trang chứa" là gì? – Pacerier

8

Điều này được xác định chính xác theo số HTML5 standard in section 5.5.3.1.

+0

+1. Nó là chính xác như đã nói trong phản ứng. –

+0

Tôi muốn thông số kỹ thuật được nhiều người đọc hơn. "với các ngoại lệ sau đây: href setter, nếu ngữ cảnh duyệt chịu trách nhiệm được chỉ định bởi đối tượng cài đặt nhập là quen thuộc với ngữ cảnh duyệt mà đối tượng Location được liên kết" WHAT ??? –