Điểm:1

định cấu hình apache để không phân phối tĩnh các tệp php trừ khi php-fpm được định cấu hình

lá cờ ng
Tom

Tôi có phần cấu hình apache 2.4 mà tôi sử dụng để xử lý tình huống hiếm gặp trong đó hộp apache bị định cấu hình sai có thể phân phát tệp php dưới dạng văn bản thuần túy tĩnh và có khả năng từ bỏ thông tin xác thực, v.v.

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <Files "*.php">
        Require all denied
    </Files>
  </IfModule>
</IfModule>

Các lệnh đó kiểm tra xem mô-đun php có hiện diện hay không và nếu nó không tìm thấy một trong số chúng, thì nó sẽ không phục vụ các trang.

Tuy nhiên, trong bản dựng hiện tại của httpd 2.4 cho centos-8, php-fpm là phương thức mặc định để định cấu hình trình xử lý cho php và nó không tải bất kỳ mô-đun nào cho php:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
  </IfModule>
</IfModule>

Thật không may, mô-đun proxy_fcgi được tải tự động bởi httpd, vì vậy nó không hữu ích như một dấu hiệu cho thấy php-fpm đang được định cấu hình (hoặc không):

[root@web httpd]# rpm -q --whatprovides /usr/lib64/httpd/modules/mod_proxy_fcgi.so
httpd-2.4.37-39.module_el8.4.0+778+c970deab.x86_64

Dựa theo tài liệu đây là một NGƯỜI XỬ LÝ Biến đổi:

XỬ LÝ Tên của trình xử lý tạo phản hồi

... sẽ trả lại một trong những trong bộ xử lý được xây dựng

trình xử lý mặc định: Gửi tệp bằng default_handler(), đây là trình xử lý được sử dụng theo mặc định để xử lý nội dung tĩnh. (cốt lõi)
gửi nguyên trạng: Gửi tệp có tiêu đề HTTP nguyên trạng. (mod_asis)
cgi-script: Coi tệp dưới dạng tập lệnh CGI. (mod_cgi)
imap-file: Phân tích dưới dạng tệp quy tắc sơ đồ hình ảnh. (mod_imagemap)
server-info: Lấy thông tin cấu hình của máy chủ. (mod_info)
server-status: Nhận báo cáo trạng thái của máy chủ. (mod_status)
bản đồ loại: Phân tích cú pháp dưới dạng tệp bản đồ loại để đàm phán nội dung. (mod_negotiation)

Tuy nhiên, những nỗ lực của tôi để đối sánh với nó không thành công, ví dụ: đây không phải là làm việc:

<FilesMatch \.(php|phar)$>
  <If "%{HANDLER} == 'default-handler'">
    Require all denied
  </If>
</FilesMatch>

Bất kỳ đề nghị đánh giá cao.

Chỉnh sửa

Tôi đã bỏ giá trị của biến %{HANDLER} với cả hai php-fpm được cài đặt và không phải như vậy:

<IfModule headers_module>
    Header  always set X-HANDLER "expr=%{HANDLER}"
</IfModule>

và nó trả về các tiêu đề sau:

X-HANDLER: text/plain # no php-fpm

X-HANDLER: proxy:unix:/run/php-fpm/www.sock|fcgi://localhost # với php-fpm

vì vậy tôi đã cập nhật bài kiểm tra này:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <If "%{HANDLER} == 'text/plain'">
      <Files "*.php">
          Require all denied
      </Files>
    </If>
  </IfModule>
</IfModule>

Tuy nhiên, điều đó cũng không hoạt động

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.