Kích hoạt chế độ Full WAF cho NinjaFirewall khi Wordpress chạy trong Docker

Khi bạn chạy Wordpress trong Docker hoặc Docker Conpose và sử dụng các biến trong tệp .env để kết nối với cơ sở dữ liệu (không điền thông tin database trong wp-config.php). Theo mặc định, NinjaFirewall
sẽ đọc các biến trong wp-config.php, mà thực tế thôn tin database chính xác ở trong tệp .env. Do đó bạn không thể kích hoạt chế độ Full WAF.
Cách khắc phục đó là thêm tệp cấu hình tùy chỉnh cho NinjaFirewall

Tệp này phải được đặt tên .htninja và phải được định vị:

  • Trong thư mục phía trên gốc tài liệu trang web của bạn:
    Nếu gốc tài liệu của bạn là /home/user/public_html/ , vị trí của tệp sẽ là /home/user/.htninja .
    Đây là sự lựa chọn được đề xuất. Bởi vì nó nằm bên ngoài thư mục gốc, tệp tương đối an toàn và được bảo vệ. Tuy nhiên, nếu bạn có một hạn chế open_basedir , PHP sẽ không thể truy cập nó.

  • Trong thư mục gốc của tài liệu:
    Nếu gốc tài liệu của bạn là /home/user/public_html/ , thì vị trí của tệp sẽ là /home/user/public_html/.htninja .
    Chỉ được đề xuất nếu bạn có hạn chế open_basedir. Nếu bạn đang sử dụng máy chủ HTTP Apache, thì tệp này được bảo vệ tương đối vì theo mặc định, tệp sẽ không bao giờ phục vụ tệp có tên bắt đầu bằng .ht* . Tuy nhiên, nếu bạn đang sử dụng Nginx hoặc bất kỳ máy chủ HTTP nào khác không sử dụng tệp .htaccess, bạn phải thiết lập để nó chặn mọi quyền truy cập vào tệp từ trình duyệt web.

Tạo tệp .htninja trong thư mục gốc trang web với nội dung sau:

<?php
/*
 +===========================================================================================+
 | NinjaFirewall optional configuration file                                                 |
 |                                                                                           |
 | See: https://blog.nintechnet.com/ninjafirewall-wp-edition-the-htninja-configuration-file/ |
 +===========================================================================================+
*/
if (!function_exists('getenv_docker')) {
   // https://github.com/docker-library/wordpress/issues/588 (WP-CLI will load this file 2x)
   function getenv_docker($env, $default) {
      if ($fileEnv = getenv($env . '_FILE')) {
         return rtrim(file_get_contents($fileEnv), "\r\n");
      } else if (($val = getenv($env)) !== false) {
         return $val;
      } else {
         return $default;
      }
   }
}
// Connect to the DB and store the link into "$GLOBALS['nfw_mysqli']":
$GLOBALS['nfw_mysqli'] = new mysqli(
   getenv_docker('WORDPRESS_DB_HOST', 'mysql'),
   getenv_docker('WORDPRESS_DB_USER', 'example username'),
   getenv_docker('WORDPRESS_DB_PASSWORD', 'example password'),
   getenv_docker('WORDPRESS_DB_NAME', 'wordpress')
);
// We need the table prefix too:
$GLOBALS['nfw_table_prefix'] = getenv_docker('WORDPRESS_TABLE_PREFIX', 'wp_');

Lưu lại và kiểm tra NinjaFirewall → Dashboard, nếu có thông tin sau là được

Bây giờ bạn có thể kích hoạt lại chế độ Full WAF