Bạn lo lắng về các cuộc tấn công HTTP Host Header có thể gây nguy hiểm cho website Drupal của mình? Bài viết này sẽ cung cấp cho bạn một hướng dẫn toàn diện về cách cấu hình Trusted Host Settings một cách chính xác. Chúng ta sẽ khám phá cách bảo vệ website của bạn trên các phiên bản Drupal khác nhau và trong các môi trường phát triển phổ biến như DDEV, MAMP, Lando và Docker. Hãy cùng tìm hiểu để đảm bảo an toàn cho website của bạn!
HTTP Host Header attacks là một loại tấn công phổ biến, trong đó kẻ tấn công có thể giả mạo Host Header trong yêu cầu HTTP để chuyển hướng người dùng đến một website độc hại hoặc khai thác các lỗ hổng bảo mật trên server của bạn. Việc cấu hình Trusted Host Settings giúp ngăn chặn các cuộc tấn công này bằng cách chỉ cho phép Drupal chấp nhận các Host Header hợp lệ.
Việc không cấu hình đúng cách có thể dẫn đến nhiều rủi ro, bao gồm:
Drupal 8 và các phiên bản mới hơn sử dụng cơ chế trusted host của Symfony. Để kích hoạt, bạn cần chỉnh sửa file `settings.php` (thường nằm ở `sites/default/settings.php` trong thư mục webroot của bạn) và thêm vào mảng `$settings['trusted_host_patterns']` các regular expression (regex) cho phép các host mà bạn muốn chấp nhận.
Ví dụ, nếu bạn chỉ muốn cho phép website chạy trên `www.example.com`, bạn có thể cấu hình như sau:
$settings['trusted_host_patterns'] = [
'^www\.example\.com$',
];
Giải thích các thành phần trong regex:
Nếu bạn đang chạy multisite hoặc website của bạn có nhiều domain khác nhau (ví dụ: `example.com` và `example.org`), hãy chỉ định tất cả các host pattern được phép:
$settings['trusted_host_patterns'] = [
'^example\.com$',
'^.+\.example\.com$',
'^example\.org$',
'^.+\.example\.org$',
];
Trên Drupal 7, bạn cần cấu hình mảng `$conf['trusted_host_patterns']` trong file `settings.php`:
$conf['trusted_host_patterns'] = [
'^www\.example\.com$',
];
Ngoài ra, bạn có thể cấu hình webserver để chuyển hướng các request không hợp lệ đến domain chính xác hoặc hiển thị trang lỗi.
Khi phát triển trên môi trường local, bạn cần thêm `localhost` và IP address `127.0.0.1` vào danh sách các host được tin cậy:
$settings['trusted_host_patterns'] = [
'^localhost$',
'127\.0\.0\.1',
// Hoặc sử dụng preg_quote() để escape các ký tự đặc biệt
preg_quote('127.0.0.1'),
];
Nếu `'^localhost$'` không hoạt động trên MAMP, bạn có thể thử cấu hình như sau:
$settings['trusted_host_patterns'] = [
'^drupal$', // Với site có tên là 'drupal'
];
Với Lando, bạn có thể sử dụng biến môi trường `LANDO_APP_NAME`:
$settings['trusted_host_patterns'] = [
'^' . getenv('LANDO_APP_NAME') . '\.lndo\.site$',
'^' . preg_quote(getenv('LANDO_APP_NAME') . '.lndo.site') . '$',
'^localhost$',
'^' . getenv('LANDO_APP_NAME') . '\.localtunnel\.me$',
'^192\.168\.1\.100$', // LAN IP access
];
Để quản lý trusted host settings dễ dàng hơn trên nhiều môi trường (DEV, TEST, PROD), bạn có thể sử dụng biến môi trường:
$settings['trusted_host_patterns'] = [
'^' . getenv('DRUPAL_TRUSTED_HOST') . '$',
];
Sau đó, bạn có thể định nghĩa biến môi trường `DRUPAL_TRUSTED_HOST` trong Dockerfile hoặc docker-compose.yml.
Nếu bạn đang chạy Drupal trên Google Cloud Kubernetes Cluster và sử dụng Google Cloud Ingress, hãy đảm bảo rằng các health check của Google nhận được HTTP 200. Nếu không, bạn có thể cần whitelist các host trong `trusted_host_patterns` hoặc cấu hình Host header của health checks.
Cấu hình Trusted Host Settings là một bước quan trọng để bảo vệ website Drupal của bạn khỏi các cuộc tấn công HTTP Host Header. Bằng cách làm theo hướng dẫn này, bạn có thể đảm bảo rằng website của bạn chỉ chấp nhận các host header hợp lệ, giảm thiểu rủi ro bảo mật và bảo vệ thông tin của người dùng.
Bài viết liên quan