Kể từ khi phân khúc đường dẫn 2014 được biết là đóng góp cho Reflected File Download attacks. Giả sử chúng ta có một API dễ bị tổn thương phản ánh bất cứ điều gì chúng tôi gửi cho nó (URL đã được thực rõ ràng, bây giờ cố định):
https://google.com/s?q=rfd%22||calc||
{"results":["q", "rfd\"||calc||","I love rfd"]}
Bây giờ, đây là vô hại trong một trình duyệt như đó là JSON vì vậy nó sẽ không được trả lại nhưng trình duyệt thay vì sẽ cung cấp để tải xuống phản hồi dưới dạng tệp. Bây giờ đây là đoạn đường đến để giúp đỡ (đối với những kẻ tấn công):
https://google.com/s;/setup.bat;?q=rfd%22||calc||
Tất cả mọi thứ giữa dấu chấm phẩy (;/setup.bat;
) sẽ không gửi đến dịch vụ web, nhưng thay vào đó trình duyệt sẽ giải thích nó như tên tập tin. .. để lưu phản hồi API. Bây giờ, một tập tin gọi là setup.bat
sẽ được tải xuống và chạy mà không hỏi về nguy hiểm của việc chạy các tệp được tải xuống từ Internet (vì nó chứa từ "setup"
trong tên của nó). Nội dung sẽ được hiểu là tệp lô Windows và lệnh calc.exe
sẽ được chạy.
Phòng ngừa:
- sanitize đầu vào của API của bạn (trong trường hợp này họ chỉ nên cho phép chữ cái và số); thoát là không đủ
- thêm
Content-Disposition: attachment; filename="whatever.txt"
vào các API sẽ không được hiển thị; Google đã mất tích phần filename
mà thực sự thực hiện cuộc tấn công dễ dàng hơn
- thêm
X-Content-Type-Options: nosniff
tiêu đề để ứng phó API
Tóm lại, được bảo lưu, nhưng không có gì đặc biệt. Chúng tôi sử dụng nó để mã hóa một số thông tin trong các truy vấn RESTful. –
Cảm ơn ví dụ, điều đó thực sự hữu ích. – Nicole
Ai đó có thể chia sẻ một ví dụ về điều này được sử dụng trong các dịch vụ web từ thực tế không? – Winny