Cho phép hoạc chặn thực thi file PHP trên Nginx Server

Khi quản trị website trong điều kiện bình thường thì chúng ta chẳng cần quan tâm đến vấn đề chặn file php (không cho thực thi, chạy file php) trên host. Nhưng vì vấn đề bảo mật website, tránh bị tấn công, hack web nên trong vài trường hợp ta cần dùng phương án này để cấm (deny) file php. Tùy từng mã nguồn hoạc code tự viết và chúng ta có thể nắm vững cấu trúc php của chúng ta hoạt động như thế nào thì mới áp dụng được.

Nghe có vẻ buồn cười vì chặn các file .php thì website php chạy làm sao? Ở đây tôi dùng phương pháp này để hạn chế bị khai thác lỗ hổng mang tên Code Injection (php injection) tương tự SQL injection vậy. Hoạc ngăn chặn thực thi các file Shell PHP do hacker upload lên host/ server của chúng ta.

Tôi thích sử dụng Server Nginx hơn so với Apache vì tính bảo mật và hiệu năng, nên bài viết này chỉ áp dụng với các server, vps chạy trên nền Nginx

1, Cho phép thực thi file PHP đối với các folder cụ thể và các file cụ thể

Cấu hình Nginx cho phép thực thi file PHP trong trường hợp nhất định

location ~ (/(folder1|folder2)/(.+)\.php$)|/(index|file1|filephp2)\.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 8 16k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME /home/ten_mien_cua_ban.vn/public_html$fastcgi_script_name;}

Ý nghĩa

Đoạn mã trên sẽ cho phép thực thi các file .PHP có trong thư mục folder1folder2 và các file .php trong thư mục root có tên: index.php, filephp2.php, file1.php

2. Chặn thực thi file PHP trong các folder cụ thể hoạc các file PHP cụ thể

Chặn thực thi file php trên host nginx

Cấu hình Nginx chặn PHP

location ~ (/(images|folder_upload|(.+))/(.+)\.php$)|(/(.+)\.php$) {
 deny all;
 access_log off;
 log_not_found off;
 }

Ghi chú:

Đoạn Mã trên sẽ chặn thực thi toàn bộ file PHP trên website trong tất cả các thư mục. Mình liệt kê thư mục images và folder_upload cho các bạn dễ hình dung. Nếu chặn toàn bộ dùng một biến (.+) là đủ. Đối với thư mục gốc (root) cũng vậy

Trả lời