Hotlinking—hay còn gọi là liên kết nội tuyến—là một hình thức “hút tài nguyên” khi một trang web bên thứ ba không được phép nhúng liên kết đến tài nguyên (như hình ảnh, video) từ trang web chính của bạn. Trang web bên thứ ba không chịu chi phí lưu trữ nội dung, dẫn đến việc trang web của bạn phải gánh chịu chi phí băng thông và tài nguyên. Điều này có thể gây ra thời gian tải chậm, mất doanh thu và các vấn đề pháp lý tiềm ẩn.
Hiện nay, bạn có thể sử dụng AWS WAF để giúp ngăn chặn hotlinking. AWS WAF là một tường lửa ứng dụng web tích hợp chặt chẽ với Amazon CloudFront—một mạng phân phối nội dung (CDN)—và có thể giúp bảo vệ ứng dụng web của bạn khỏi các khai thác web phổ biến có thể ảnh hưởng đến tính khả dụng của ứng dụng, làm suy yếu bảo mật và tiêu tốn tài nguyên quá mức.
Thách thức của hotlinking khi dùng CDN
Trong môi trường truyền thống, việc ngăn chặn hotlinking có thể được xử lý thông qua kiểm tra tiêu đề Referer tại máy chủ web. Tuy nhiên, khi bạn triển khai hệ thống với CDN như Amazon CloudFront, phương pháp này trở nên kém hiệu quả vì CloudFront lưu trữ bản sao nội dung tại các điểm biên và phục vụ trực tiếp cho người dùng mà không cần liên hệ lại với máy chủ gốc.
Khi xảy ra hotlinking, một trang web bên thứ ba có thể trích xuất ảnh/video từ máy chủ CloudFront của bạn mà không hề trả bất kỳ chi phí nào, trong khi bạn thì phải thanh toán chi phí băng thông và tài nguyên. Đây là lý do tại sao cần triển khai giải pháp chặn hotlinking ngay từ tầng CDN bằng AWS WAF.
Tổng quan quy trình
Bạn có thể giải quyết hotlinking theo nhiều cách. Ví dụ, bạn có thể xác thực tiêu đề Referer (được trình duyệt gửi để cho máy chủ biết trang nào đã giới thiệu họ) tại máy chủ web của bạn (chẳng hạn, bằng cách sử dụng mô-đun mod_rewrite của Apache), và thực hiện chuyển hướng trở lại trang chính của trang web của bạn hoặc trả về lỗi “403 Forbidden” cho trình duyệt của khách truy cập.
Nếu bạn đang sử dụng CDN như CloudFront để tăng tốc độ phân phối nội dung của trang web, việc xác thực tiêu đề Referer tại máy chủ web trở nên kém hiệu quả hơn. CDN lưu trữ một bản sao nội dung của bạn tại các vị trí biên trong mạng máy chủ của nó, vì vậy ngay cả khi máy chủ web của bạn xác thực tiêu đề của yêu cầu ban đầu (trong trường hợp này là Referer), các yêu cầu bổ sung cho nội dung đó phải được CDN tự xác thực vì chúng khó có thể đến máy chủ gốc.
Kiến trúc ngăn chặn hotlinking với AWS:
Một yêu cầu đến từ khách hàng cuối đến vị trí biên của Amazon CloudFront.
Vị trí biên cố gắng trả về một bản sao được lưu trong bộ nhớ đệm của tệp được yêu cầu.
Nếu không có bản sao trong bộ nhớ đệm hoặc bản sao không hợp lệ (ví dụ, nếu nội dung đã lỗi thời), yêu cầu sẽ quay lại máy chủ gốc (ví dụ, Amazon S3) để lấy một bản sao mới của đối tượng Amazon Web Services, Inc.
Trong trường hợp có bản sao trong bộ nhớ đệm, máy chủ gốc không thể áp dụng bất kỳ xác thực nào cho yêu cầu của người dùng cuối, vì máy chủ biên không cần liên hệ với máy chủ gốc để thực hiện yêu cầu của người dùng cuối.
Cách kiểm tra tiêu đề với AWS WAF để chặn hoặc cho phép yêu cầu tại CDN
Bài đăng này bao gồm hai cách thiết lập AWS WAF để giúp ngăn chặn liên kết nóng:
- Sử dụng một miền phụ riêng biệt: Các tệp tĩnh (như hình ảnh hoặc thành phần kiểu dáng) cần được bảo vệ sẽ được chuyển đến một miền phụ riêng biệt như static.example.com để bạn chỉ cần xác thực tiêu đề Referer.
- Sử dụng cùng một miền: Các tệp tĩnh nằm trong một thư mục trên cùng một miền. Giải pháp này bao gồm cách mở rộng ví dụ này để kiểm tra xem có tiêu đề Referer trống không.
Lựa chọn phương pháp sẽ phụ thuộc vào cách trang web của bạn được cấu trúc và mức độ bảo vệ mà bạn muốn triển khai. Phương pháp đầu tiên cho phép bạn thiết lập kiểm tra tiêu đề Referer để đảm bảo rằng các yêu cầu về hình ảnh chỉ đến từ một miền phụ được phép, trong khi phương pháp thứ hai có thêm một lần kiểm tra đối với tiêu đề Referer trống. Phương pháp thứ hai mở rộng phương pháp đầu tiên và cho phép người dùng có một số tính linh hoạt để chia sẻ liên kết trực tiếp đến hình ảnh trong khi vẫn ngăn các trang web của bên thứ ba không liên kết nhúng các liên kết hình ảnh vào trang web của họ.
Kết quả
Khi bạn yêu cầu các tệp mà không có tiêu đề Referer trong danh sách trắng, các yêu cầu bị chặn tại CDN. Tuy nhiên, các yêu cầu hợp lệ vẫn được cho phép.
Khi một bên thứ ba nhúng nội dung của chúng bạn (yêu cầu bị chặn tại CDN):
Khi bạn nhúng nội dung của chúng bạn (yêu cầu được cho phép qua CDN):