2012-05-10 24 views
24

Tôi đang đặt câu hỏi này bởi vì chúng tôi sẽ phát triển một ứng dụng được cho là chia sẻ dữ liệu gốc xuyên qua javascript. Một giải pháp có thể có vẻ là JSONP vì nó sử dụng các thẻ SCRIPT kéo dữ liệu từ các miền khác. Tuy nhiên, tôi muốn tránh tình huống mà chúng tôi thực hiện mã tuyệt vời của chúng tôi trên giả định rằng thẻ SCRIPT không phải là đối tượng bị sop và tại một số trình duyệt điểm cấm chức năng này.Tại sao thẻ HTML SCRIPT không tuân theo cùng chính sách gốc

Ai có thể làm sáng tỏ lý do cho thẻ SCRIPT cho phép yêu cầu miền chéo?

+0

Vì lý do tương tự, các thẻ không phải chịu sự cố. – Corbin

+0

Lý do đó sẽ là gì và cách áp dụng cho các tập lệnh (thực thi)? – moritz

+6

Chính sách nguồn gốc giống nhau, theo một cách nào đó, thực sự tại sao các thẻ tập lệnh cho các tên miền khác là an toàn. Bạn không chính xác vô tình bao gồm một thẻ script trong đánh dấu của bạn (hy vọng không anyway), nhưng bạn không thể đảm bảo sự an toàn của mã bạn làm bao gồm nếu bạn không kiểm soát nó. Bạn có thể muốn bao gồm một số JS để bạn có thể có quảng cáo trên trang của mình, nhưng bạn sẽ không muốn trang web quảng cáo đó có quyền truy cập vào cookie phiên của người dùng của bạn. – Corbin

Trả lời

2

Đó là lý do tương tự tại sao bạn có thể sử dụng (không đọc, như trong tải tệp nội dung) kịch bản, phong cách và hình ảnh tổ chức từ các miền khác.


Tôi đọc the spec regerding scripts và không nêu rõ lý do tại sao. Tất cả điều đó nói là:

Nếu src có giá trị URI, tác nhân người dùng phải bỏ qua nội dung của phần tử và truy xuất tập lệnh qua URI.

lấy [và thực hiện]

+0

Các kiểu và hình ảnh không vốn dĩ nguy hiểm, ngoài ra: bất kỳ yêu cầu Ajax nào cũng không được phép thực hiện các yêu cầu miền chéo, tại sao lại tạo ra một ngoại lệ cho thẻ script? Bạn đang đề xuất nó là vì lý do lịch sử? – moritz

+3

@mosch [Hình ảnh cũng có thể nguy hiểm] (http://seclists.org/isn/2004/Sep/88) –

+0

Kiểu và hình ảnh * là * tuân theo chính sách Gốc giống nhau. Thuộc tính '.cssRules' của một 'CSSStyleSheet' (ví dụ' document.styleSheets [0] 'là' null' đối với các tài nguyên có nguồn gốc khác nhau. Hình ảnh không thể được thao tác trên canvas nếu chúng từ một tên miền khác. –

3

Tôi cho rằng this draft tựa đề "Nguyên tắc của Same-Origin chính sách" giải thích (mặc dù thời gian ngắn) những gì là khá nhiều trong đầu của tất cả mọi người:

Về nguyên tắc, người sử dụng các đại lý có thể xử lý mọi URL dưới dạng hiệu trưởng riêng biệt và tách riêng từng tài liệu khỏi mọi URL khác trừ khi tài liệu chỉ rõ rằng URL đó tin cậy URL đó. Thật không may, thiết kế này là cồng kềnh cho các nhà phát triển bởi vì các ứng dụng web thường bao gồm một số diễn xuất tài nguyên trong buổi hòa nhạc.

Như một phép tính xấp xỉ, tác nhân người dùng nhóm các URL lại với nhau thành các miền bảo vệ được gọi là nguồn gốc. Cụ thể, hai URL là một phần của cùng một nguồn gốc (tức là, đại diện cho cùng một hiệu trưởng) nếu chúng có cùng sơ đồ, máy chủ và cổng.

Tóm lại: khó xây dựng Web hơn nếu mọi thứ đều tuân theo SOP.

+0

Cảm ơn câu trả lời sâu sắc, đây cũng là điều mà GGG gợi ý (về hình ảnh) nhưng những gì tôi không thấy là tại sao tôi lại có cùng một chính sách nguồn gốc khi có những phương pháp dễ dàng để vượt qua nó? Tôi có thể chắc chắn rằng trong 5 năm tới, các trình duyệt vẫn có thể làm cho JSONP có thể được không? – moritz

+0

@mosch: JSONP yêu cầu khách hàng và máy chủ hợp tác một cách rõ ràng và khách hàng hoàn toàn tin tưởng vào máy chủ, tôi sẽ không gọi đây là một phương pháp dễ dàng. Nó hoạt động là một "giao thức" giữa máy khách và máy chủ mà người dùng không biết gì cả. Nó giống như hỏi "làm thế nào tôi có thể chắc chắn rằng trong năm năm trình duyệt sẽ vẫn không từ chối tải các bảng định kiểu từ các URL chứa' foo' ". – Jon

-1

Lý do là do di sản. Nó được xây dựng theo cách đó nhiều năm trước và nếu nó thay đổi ngay bây giờ, quá nhiều trang web sẽ thất bại. Ngoài ra, các tác động an ninh cũng được biết đến, vì nó đã tồn tại quá lâu.

Các vấn đề liên quan