2010-07-01 27 views
8

Điều tôi thấy thực sự khó hiểu, đó là lý do tại sao các yêu cầu AJAX bị giới hạn ở cùng một miền? Lý do đằng sau điều này là gì?Tại sao các yêu cầu AJAX bị giới hạn ở cùng một miền?

Tôi không thấy bất kỳ sự cố nào khi yêu cầu tệp từ các vị trí bên ngoài, các máy chủ làm cho các yêu cầu XMLHTTP dường như nhận được và đăng lên các vị trí bên ngoài tốt.

+0

Có thể mật khẩu của bạn sẽ không được gửi đến một số máy chủ không có thật ... – Alxandr

+0

Nhưng trang web bạn đang truy cập sẽ phải gửi mật khẩu của bạn qua tập lệnh và về mặt lý thuyết, họ đã biết nó ? –

Trả lời

17

Ảnh này:

Bạn truy cập trang web tuyệt vời của tôi www.halfnakedgirls.com. Bạn vui vẻ xem những gì trông giống như tài liệu kỹ thuật về sinh lý học của con người, nhưng đằng sau lưng bạn, một số dòng JavaScript đang thực hiện một số yêu cầu đến một tên miền khác, giả sử www.yourpaypallike.com.

Yêu cầu như http://www.yourpaypallike.com/account/[email protected]&amount=984654 hoặc http://www.mymailprovider.com/mails/export?format=csv.

Bây giờ bạn có thấy lý do bị cấm không? =)

+1

Cảm ơn, điều đó có ý nghĩa rất nhiều. Giả sử người dùng đăng nhập vào Paypal, sau đó trang web độc ác có thể truy cập một trang web bên ngoài như thể họ đã đăng nhập vào đó. –

+0

Giả vờ tôi là giả và tôi không hiểu tại sao nó bị cấm. Có phải vấn đề mà halfnakedgirls.com có ​​thể gửi hướng dẫn xấu đến paypal bằng cách sử dụng cookie paypal của bạn, mặc dù nó không thể đọc các cookie đó? Trong khi đó với cách giải quyết "chuyển hướng trang web", dữ liệu cookie sẽ bị loại bỏ và paypal sẽ không coi bạn là đã đăng nhập? –

+0

Chính xác, vì trình duyệt của bạn tự động thêm cookie vào mọi yêu cầu được thực hiện. Bạn yêu cầu yourpaypallike.com, trình duyệt gửi cookie của paypallike.com theo yêu cầu ajax. 'Chuyển hướng trang web' thực sự xóa cookie. Yêu cầu đầu tiên được thực hiện cho 'máy chủ trung gian' không chứa cookie của mục tiêu cuối (youpaypallike.com), vì vậy khi máy chủ trung gian chuyển yêu cầu sang paypalike, không có cookie trả tiền. –

0

Dưới đây là một số thông tin để đáp ứng câu hỏi của bạn: http://en.wikipedia.org/wiki/Same_origin_policy

+1

Cảm ơn các liên kết nhưng nó vẫn không cho tôi một lý do thỏa đáng Tại sao nó không được phép, nó chỉ mô tả nó như là một khái niệm an ninh. –

1

Đó là vì mục đích an ninh - nếu một trang web có thể thực hiện các cuộc gọi AJAX để bất kỳ tên miền họ muốn trên các mặt hàng, nó đặt ra một nguy cơ nghiêm trọng.

Có nhiều cách để giải quyết vấn đề này - bạn có thể yêu cầu AJAX gọi một tập lệnh PHP trên cùng một tên miền, từ đó có thể gọi một tập lệnh từ một miền khác và gửi lại. Điều này sẽ không được sử dụng trình duyệt như là phương tiện truyền thông mặc dù, nó muốn được sử dụng máy chủ web của bạn.

+0

Cảm ơn, tôi biết nó đặt ra một nguy cơ bảo mật nhưng không ai giải thích điều này là gì. –

3

Tom, nó không phải là "yêu cầu Ajax bị giới hạn". AJAX dựa trên JavaScript. Vì lý do bảo mật, JavaScript bị cấm truy cập trên các tên miền chéo. Nếu bạn thực sự muốn làm tên miền chéo Ajax, bạn có thể làm một hack.

YourPage (Ajax) ----> YourServer ----> ExternalDomain

Bạn có thể gọi một trang trong máy chủ của bạn sử dụng Ajax, Tên miền của bạn sẽ gọi đến tên miền bên ngoài sử dụng phía máy chủ, và nhận được kết quả sau đó trả về cho bạn dưới dạng phản hồi Ajax. Tất nhiên yêu cầu được thực hiện đối với máy chủ ExternalDomain sẽ được gọi là KHÔNG gửi cookie cho ExternalDomain nằm trong bộ nhớ của trình duyệt của bạn. Đó là bởi vì yêu cầu được thực hiện bởi máy chủ của bạn chứ không phải trình duyệt của bạn.

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