Safe mode PHP là gì ? Lợi và hại khi safe_mode được bật ?

Safe Mode là gì?

Safe Mode trong PHP (chế độ An toàn trong PHP): một kỹ thuật thường được Shared Hosting (Hosting Chia sẻ) áp dụng để tăng cường bảo mật (chống lại các tấn công nội bộ, thường được gọi là Hack Local). Kỹ thuật này không thực sự hoàn hảo ở mức PHP và cho đến thời điểm hiện tại nó vẫn được áp dụng ở nhiều nơi. Tuy nhiên, cũng thật may là kể từ phiên bản PHP 6.0 tính năng này sẽ bị loại bỏ và chúng ta sẽ không còn phải bận tâm đến nó nữa.

Xác định Safe Mode đang là On hay Off?

Tạo một file info.php trong thư mục Web của bạn với nội dung như sau:

[dt_code]<?php phpinfo(); ?>[/dt_code]

Mở đường dẫn tới file info.php. VD: http://localhost/info.php

Tìm mục “Loaded Configuration File” để biết file cấu hình php.ini được đặt ở đâu.

Tìm mục “safe_mode” để biết trạng thái hiện tại của Safe Mode (On là bật, Off là tắt)

Tắt chế độ Safe Mode?

Trường hợp 1: Bạn có thể quản lý Server

Xác định vị trí file cấu hình php.ini (xem ở bài trên), mở file và thiết lập giá trị

[dt_code]safe_mode = Off[/dt_code]

Trường hợp 2: Bạn không phải là người quản lý Server

Bạn có thể thử tắt nó bằng 1 trong 3 cách (với điều kiện Server cho phép ghi đè lên thiết lập ban đầu)

– Cách 1 – Tạo một file “.htaccess” ở thư mục Web của bạn với chỉ thị

[dt_code]
php_flag safe_mode off
[/dt_code]

– Cách 2 – Tạo một file “php.ini” ở thư mục Web của bạn với chỉ thị

[dt_code]
safe_mode = Off
[/dt_code]

– Cách 3 – Dùng hàm ini_set của PHP: Đặt lệnh sau vào file cấu hình (chẳng hạn globals.php, configuration.php

[dt_code]
ini_set('safe_mode','Off');
[/dt_code]

Bản chất của Safe Mode.

Giả sử bạn có một script: /home/megabits/do_some_thing.php với nội dung

[dt_code]
<?php 
// do job-1 
// do job-2 
// .... 
// do job-n 
?>
[/dt_code]

Với Safe Mode = On, khi bạn thực thi script do_some_thing.php ở trên, Server sẽ kiểm tra Owner (chủ sở hữu) của script do_some_thing.php là ai? VD: “megabits” hay “apache” hay “user-xyz” nào đó.

Nếu trong công việc “job-x” có 1 phép xử lý liên quan tới file hay thư mục nào đó (thư mục /opt/lampp/tmp chẳng hạn), mà file hay thư mục này lại thuộc quyền sở hữu của 1 Owner khác), lỗi sẽ xảy ra.

Ngoài ra khi Safe Mode = On thì có thể rất nhiều hàm đã bị vô hiệu hóa. VD: move_uploaded_file(), mkdir()… Do vậy, nếu trong script *.php của bạn có sử dụng 1 trong các hàm trên, lỗi cũng xảy ra.

Danh sách các hàm bị vô hiệu hóa: http://vn2.php.net/manual/en/features.safe-mode.functions.php

VD: Safe Mode = On ảnh hưởng tới việc cài đặt Joomla

Khi bạn cài đặt một module/component/plugin/template trên Joomla, Joomla sẽ thực hiện các công việc sau

  1. Upload gói cài đặt (*.zip) tới thư mục tạm của Webserver, chẳng hạn: /opt/lampp/tmp (biết bằng tham số “upload_tmp_dir” thông qua file info.php đã nói ở trên)
  2. Giải nén gói cài đặt: Tương ứng với việc tạo các thư mục, và file (theo hướng dẫn mà file .xml trong gói cài đặt .zip đã chỉ ra)
  3. Chuyển các thư mục và file đã giải nén ở trên tới các vị trí thích hợp trong thư mục Web Joomla của bạn.

Lưu ý: Safe Mode có thể thiết lập việc kiểm tra với Owner (UID) hoặc Group Owner (GID)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *