Cách ngăn chặn hotlinking bằng AWS WAF, Amazon CloudFront và kiểm tra Referer

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.

Cách ngăn chặn hotlinking bằng AWS WAF, Amazon CloudFront và kiểm tra Referer

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.

Request – response flow showing instances of a cache-miss and a cache-hit

Kiến trúc ngăn chặn hotlinking với AWS: 

  1. Một yêu cầu đến từ khách hàng cuối đến vị trí biên của Amazon CloudFront.

  2. 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.

  3. 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 một bên thứ ba nhúng nội dung của chúng tôi (yêu cầu bị chặn tại CDN):​  bash
Sao chép
Chỉnh sửa

  • Khi bạn nhúng nội dung của chúng bạn (yêu cầu được cho phép qua CDN):

Khi tôi nhúng nội dung của chúng tôi (yêu cầu được cho phép qua CDN):​  bash
Sao chép
Chỉnh sửa
Với Phương pháp 1, bạn phải thực hiện yêu cầu với tiêu đề Referer trong danh sách trắng, và trong trường hợp này, tất cả các đường dẫn đều được lọc. Trong Phương pháp 2, bạn sẽ cho phép tiêu đề Referer trống và cũng sẽ hiển thị cách lọc theo đường dẫn URL nhất định.

Phương pháp 2: Tất cả nội dung dưới cùng một miền, với lọc theo đường dẫn

Trong phương pháp thứ hai này, bạn sẽ tạo một ACL web AWS WAF chứa nhiều quy tắc với các điều kiện khớp bổ sung, bao gồm nhiều bộ lọc. Cũng như phương pháp đầu tiên, điều kiện khớp xem xét tiêu đề Referer; tuy nhiên, bạn hiện xác thực nó theo hai cách: đầu tiên, bạn xác thực xem nó có chứa tiêu đề mong đợi của bạn thay không, và nếu không, bạn chuyển sang xác thực thứ hai, kiểm tra xem nó có bất kỳ tiêu đề Referer “kiểu URL” nào không. Điều này cho phép bạn truy cập trực tiếp vào các tài sản trong trình duyệt khi các tài sản không được nhúng trong một trang web, nhưng vẫn cung cấp bảo vệ chống lại hotlinking.

Bạn cũng sẽ xác thực đường dẫn (trong trường hợp này là /wp-content) được sử dụng trong yêu cầu, cho phép AWS WAF bảo vệ các thư mục riêng lẻ dưới một tên miền duy nhất.

Tìm hiểu thêm: https://osam.io/bao-mat-du-lieu-tren-aws-voi-he-thong-symmetry/

                          https://osam.io/aws-deployment-framework/’

💻 Bạn đã sẵn sàng nâng tầm doanh nghiệp với AWS chưa? Hãy để chúng tôi giúp bạn bắt đầu ngay hôm nay! 🚀
𝗢𝗦𝗔𝗠 – Tiên phong công nghệ, đồng hành cùng AWS trong việc thúc đẩy sự đổi mới và hiệu quả.