Đăng ký tên miền chéo


145

Tôi đã thấy các bài viết và bài đăng trên tất cả (bao gồm SO) về chủ đề này và bình luận phổ biến là chính sách cùng nguồn gốc ngăn chặn một biểu mẫu POST trên các tên miền. Nơi duy nhất tôi thấy ai đó đề xuất rằng chính sách cùng nguồn gốc không áp dụng cho các bài đăng mẫu, là ở đây .

Tôi muốn có câu trả lời từ một nguồn chính thức hoặc "chính thức" hơn. Ví dụ, có ai biết RFC giải quyết vấn đề cùng nguồn gốc như thế nào hoặc không ảnh hưởng đến POST mẫu không?

làm rõ : Tôi không hỏi liệu GET hoặc POST có thể được xây dựng và gửi đến bất kỳ miền nào không. Tôi đang hỏi:

  1. nếu Chrome, IE hoặc Firefox sẽ cho phép nội dung từ miền 'Y' gửi POST đến miền 'X'
  2. nếu máy chủ nhận POST thực sự sẽ thấy bất kỳ giá trị biểu mẫu nào. Tôi nói điều này bởi vì phần lớn những người kiểm tra hồ sơ thảo luận trực tuyến nói rằng máy chủ đã nhận được bài đăng, nhưng các giá trị biểu mẫu đều trống / bị loại bỏ.
  3. Tài liệu chính thức nào (tức là RFC) giải thích hành vi dự kiến ​​là gì (bất kể những gì trình duyệt hiện đang thực hiện).

Ngẫu nhiên, nếu cùng nguồn gốc không ảnh hưởng đến POST mẫu - thì điều đó làm cho phần nào rõ ràng hơn về lý do tại sao các mã thông báo chống giả mạo là cần thiết. Tôi nói "phần nào" bởi vì có vẻ quá dễ dàng để tin rằng kẻ tấn công có thể đơn giản phát hành HTTP GET để lấy một biểu mẫu có chứa mã thông báo chống giả mạo và sau đó tạo một POST bất hợp pháp có chứa mã thông báo tương tự. Bình luận?


Phải, kẻ tấn công có thể làm điều đó ... với một trình duyệt web thông thường.
Michael Hampton

Có lẽ không có RFC vì lý do tương tự tại sao không có RFC nào nói rằng: "không đăng mật khẩu của bạn trên trang web của bạn". Các tiêu chuẩn web chỉ được yêu cầu khi nhiều bên phải làm việc cùng nhau để đạt được điều gì đó: chính sách nguồn gốc giống nhau là một tập hợp "thực tiễn tốt nhất về bảo mật" phức tạp ngăn người dùng khỏi bị hack.
Ciro Santilli 郝海东 冠状 病 事件

@Ciro Hãy nói rõ ràng. Các quy tắc để đăng chéo lên các trang web khác không ảnh hưởng đến nhiều bên. Không cần cách nói sương mù.
Người ngoài hành tinh nhỏ

Câu trả lời:


175

Chính sách nguồn gốc tương tự chỉ áp dụng cho các ngôn ngữ lập trình phía trình duyệt. Vì vậy, nếu bạn cố gắng đăng lên một máy chủ khác với máy chủ gốc bằng JavaScript, thì chính sách nguồn gốc tương tự sẽ xuất hiện nhưng nếu bạn đăng trực tiếp từ biểu mẫu tức là hành động trỏ đến một máy chủ khác như:

<form action="http://someotherserver.com">

và không có javascript liên quan đến việc đăng mẫu, thì chính sách xuất xứ tương tự không được áp dụng.

Xem wikipedia để biết thêm thông tin


18
Xin lỗi để kéo lên một câu hỏi cũ, điều gì sẽ xảy ra nếu hành động được thay đổi bằng cách sử dụng JS nhưng sau đó biểu mẫu đã được đăng bằng nút? Điều đó sẽ cho phép một bài đăng tên miền chéo thành công?
Chris

AFAIK nó không phải là một vấn đề nhưng tôi đã không thử nó. Sẽ rất thú vị để tìm hiểu.
Suresh Kumar

2
Tôi có cùng suy nghĩ. Tôi thực sự đã lo lắng về bảo mật, một số JS / virus bên thứ ba thay đổi hành động để gửi biểu mẫu ở đâu đó độc hại, nhưng nhận ra điều này có thể được thực hiện trên bất kỳ hình thức nhận thanh toán nào qua miền hoặc không và kết quả sẽ giống nhau. Bài học ở đây thực sự: kiểm tra bất kỳ tệp JS của bên thứ ba nào;)
Chris

20
Tóm lại: CÓ, POST tên miền chéo được cho phép.
Christian Davén

17
-1 cho: Chính sách nguồn gốc tương tự không liên quan gì đến việc gửi yêu cầu đến một url khác (giao thức hoặc tên miền hoặc cổng khác nhau), đó là tất cả về việc hạn chế quyền truy cập (đọc) dữ liệu phản hồi từ một url khác (và do đó ngăn javascript cập nhật tài liệu với các hình thức có mã thông báo bảo mật từ url khác).
Mohsenme

43

Có thể xây dựng một yêu cầu GET hoặc POST tùy ý và gửi nó đến bất kỳ máy chủ nào có thể truy cập vào trình duyệt nạn nhân. Điều này bao gồm các thiết bị trên mạng cục bộ của bạn, chẳng hạn như Máy in và Bộ định tuyến.

Có nhiều cách để xây dựng một khai thác CSRF. Một cuộc tấn công CSRF dựa trên POST đơn giản có thể được gửi bằng .submit()phương thức. Các cuộc tấn công phức tạp hơn, chẳng hạn như các cuộc tấn công CSRF tải lên tệp chéo trang sẽ khai thác việc sử dụng CORS của hành vi xhr.withCredentals .

CSRF không vi phạm Chính sách cùng nguồn gốc đối với JavaScrip t vì SOP liên quan đến JavaScript khi đọc phản hồi của máy chủ đối với yêu cầu của máy khách. Các cuộc tấn công CSRF không quan tâm đến phản hồi, họ quan tâm đến tác dụng phụ hoặc thay đổi trạng thái do yêu cầu tạo ra, chẳng hạn như thêm người dùng quản trị hoặc thực thi mã tùy ý trên máy chủ.

Đảm bảo rằng các yêu cầu của bạn được bảo vệ bằng một trong các phương pháp được mô tả trong Bảng Cheat Ngăn chặn CSRF của OWASP . Để biết thêm thông tin về CSRF, hãy tham khảo trang OWASP trên CSRF .


Tôi đã cập nhật câu hỏi của tôi để làm rõ. Ngoài ra, liên kết WordPress mà bạn đã cung cấp liên quan đến các khai thác được bắt đầu từ bên trong cùng nguồn gốc X, thay vì bắt đầu từ tên miền Y ... vì vậy đó không phải là kịch bản phù hợp với những gì tôi thấy.
Brent Arias

@Brent Arias có, những gì bạn đang mô tả trong 1 và 2 hoàn toàn bằng với những gì một cuộc tấn công CSRF thực hiện, có lẽ bạn nên thử thực hiện một trong những khai thác CSRF được cung cấp và đánh hơi lưu lượng. Tôi đã cập nhật bài viết của mình, bạn nên đọc mọi liên kết được cung cấp bởi vì nó sẽ trả lời chính xác những câu hỏi này. Điểm của một cuộc tấn công "giả mạo yêu cầu chéo trang" (CSRF) là yêu cầu bắt nguồn từ một miền khác, tất cả các khai thác được cung cấp đáp ứng đầy đủ yêu cầu cơ bản này.
Mikey

16

Chính sách nguồn gốc tương tự không liên quan gì đến việc gửi yêu cầu đến một url khác (giao thức hoặc tên miền hoặc cổng khác nhau).

Đó là tất cả về việc hạn chế quyền truy cập (đọc) dữ liệu phản hồi từ một url khác. Vì vậy, mã JavaScript trong một trang có thể đăng lên tên miền tùy ý hoặc gửi biểu mẫu trong trang đó tới bất kỳ đâu (trừ khi biểu mẫu nằm trong iframe có url khác nhau).

Nhưng điều làm cho các yêu cầu POST này không hiệu quả là các yêu cầu này thiếu mã thông báo chống giả, do đó bị bỏ qua bởi các url khác. Hơn nữa, nếu JavaScript cố lấy mã thông báo bảo mật đó, bằng cách gửi yêu cầu AJAX đến url nạn nhân, nó sẽ bị ngăn truy cập dữ liệu đó theo Chính sách xuất xứ tương tự.

Một ví dụ điển hình: ở đây

Và một tài liệu tốt từ Mozilla: tại đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.