Một số khách hàng của chúng tôi đã nói về lỗ hổng XSS được nhận biết trong tất cả các điểm cuối JSONP của chúng tôi, nhưng tôi không đồng ý về việc nó có thực sự tạo ra lỗ hổng hay không. Muốn nhận được ý kiến của cộng đồng để chắc chắn rằng tôi không bỏ lỡ điều gì đó.Lỗ hổng jsonp xss rõ ràng
Vì vậy, như với bất kỳ hệ thống jsonp, chúng ta có một thiết bị đầu cuối như:
http://foo.com/jsonp?cb=callback123
trong đó giá trị của tham số cb là tái hiện lại trở lại trong phản ứng:
callback123({"foo":"bar"});
Khách hàng đã phàn nàn rằng chúng tôi không lọc ra HTML trong thông số CB, do đó, họ sẽ tạo ra một ví dụ như vậy:
http://foo.com/jsonp?cb=<body onload="alert('h4x0rd');"/><!--
Rõ ràng đối với một URL trả về kiểu nội dung của text/html
, điều này đặt ra một vấn đề trong đó trình duyệt hiển thị HTML đó và sau đó thực hiện javascript có khả năng độc hại trong trình xử lý tải. Có thể được sử dụng để ăn cắp cookie và gửi chúng đến trang web của kẻ tấn công, hoặc thậm chí để tạo ra một màn hình đăng nhập giả mạo cho lừa đảo. Người dùng sẽ kiểm tra tên miền và thấy rằng đó là miền mà anh ta tin tưởng, vì vậy anh ấy đã truy cập và đăng nhập.
Nhưng, trong trường hợp của chúng tôi, chúng tôi sẽ đặt tiêu đề loại nội dung là application/javascript
gây ra nhiều hành vi khác nhau trong các trình duyệt khác nhau. tức là Firefox chỉ hiển thị văn bản thô, trong khi IE mở ra hộp thoại "lưu dưới dạng ...". Tôi không xem xét một trong hai thứ đó là đặc biệt có thể khai thác được. Người dùng Firefox sẽ không đọc văn bản độc hại bảo anh ta nhảy khỏi cây cầu và nghĩ nhiều về nó. Và người dùng IE có thể sẽ bị nhầm lẫn bởi hộp thoại lưu dưới dạng và nhấn hủy.
Tôi đoán tôi có thể thấy một trường hợp người dùng IE bị lừa lưu và mở tệp .js, sau đó chuyển qua công cụ JScript microsoft và nhận tất cả các loại quyền truy cập vào máy của người dùng; nhưng điều đó có vẻ khó xảy ra. Đó có phải là mối đe dọa lớn nhất ở đây hay là có một số lỗ hổng khác mà tôi đã bỏ lỡ?
(Rõ ràng là tôi sẽ "sửa" bằng cách đặt vào bộ lọc để chỉ chấp nhận mã nhận diện javascript hợp lệ, với một số giới hạn độ dài chỉ trong trường hợp; nhưng tôi chỉ muốn một hộp thoại về những mối đe dọa khác mà tôi có thể đã bỏ lỡ .)
"Tôi chỉ muốn một hộp thoại về những gì các mối đe dọa khác tôi có thể đã bỏ lỡ "câu hỏi là gì .. và cảm ơn Thiên Chúa rằng khách hàng chỉ" phàn nàn "Tôi ngạc nhiên khi họ không tấn công trang web của bạn! – TheBlackBenzKid
Ngoài ra. tài liệu.viết và innerHTML - Tôi đã tìm thấy cả hai lệnh này làm giải pháp khi sử dụng các tiêu đề ứng dụng/javascript trên máy chủ nginx của tôi - giải quyết IE của tôi hoặc bất kỳ vấn đề nào khác. Trang chỉ thực hiện văn bản hoặc mã như bình thường – TheBlackBenzKid