Cách cấu hình PHP cho từng website trên IIS
Bạn có một Webserver chạy IIS. Và bạn đã cài thành công PHP, và cấu hình php.ini thật tốt khi chạy trên IIS. Nhưng thế đã ổn chưa? Theo tôi thì chưa ổn lắm, nếu như bạn muốn share host.
Đơn cử, chỉ với việc cấu hình: open_basedir = đường dẫn đến thư mục hostweb bạn đã ngăn cấm việc truy cập (read, write, execute, …) ra các thư mục bên ngoài (chẳng hạng như C:\WINDOWS). Nhưng câu hỏi đặt ra là: Nếu tôi muốn share host cho người khác (tạo một host mới trên IIS) thì open_basedir của host đó sẽ là thư mục nào? - Câu trả lời chính là thư mục mà bạn đã cấu hình trong php.ini
Ví dụ cụ thể:
open_basedir = “C:\WebHosting”
Hosting của bạn tại: C:\WebHosting\YourHost
Hosting share cho người khác tại: C:\WebHosting\TheirHost
Rõ ràng nếu bạn chỉ cấp hình trên php.ini thì cách bố trí như thế sẽ đảm bảo PHP chạy được trên cả 2 website (vì nếu: open_basedir = “C:\WebHosting\YourHost” thì website host tại C:\WebHosting\TheirHost sẽ không thể chạy được PHP _ do nó nằm ngoài open_basedir).
Nhưng cách cấu hình trên lại sinh ra một vấn đề vô cùng nghiêm trọng đó là mã nguồn PHP trên hosting này có thể read, write, … các file trên hosting kia (nếu như bạn không phân quyền user rõ ràng cho từng thư mục, vì mặt nhiên IIS chỉ dùng 1 tài khoản chung cho các hosting). Nhiều hosting cấu hình không kỹ, thường xuyên bị các Hacker lợi dụng. Hình thức tấn công trong trường hợp này thường được gọi là “Hack Local”
Có 2 hướng để giải quyết vấn đề này.
- Tạo cho mỗi hosting một user và chỉ cấu hình quyền cho nó trong thư mục hosting đó mà thôi.
- Giải pháp cấu hình PHP riêng cho từng website.
Ở đây mình hướng dẫn cách thứ 2, cách này cơ động hơn. Phiên bản PHP hiện tại đã hổ trợ việc này. Để đơn giản, tôi chỉ trình bày cách cấu hình: open_basedir , những cấu hình khác các bạn làm tương tự.
Cấu hình open_basedir cho hosting tại: C:\WebHosting\YourHost bằng cách tạo Key trong Registry:
Vào Start –> Run, gõ: regedit
Trong bảng Registry Editor, tạo các String Value theo cấu trúc: HKEY_LOCAL_MACHINE\SOFTWARE\PHP\Per Directory Values\c\WebHosting\YourHost
Trong HKEY_LOCAL_MACHINE\SOFTWARE\PHP\Per Directory Values\c\WebHosting\YourHost, tạo Key có Name: open_basedir, và Value: “C:\WebHosting\YourHost”
Tương tự bạn cấu hình cho hosting thứ 2:
Trong bảng Registry Editor, tạo các String Value theo cấu trúc: HKEY_LOCAL_MACHINE\SOFTWARE\PHP\Per Directory Values\c\WebHosting\TheirHost
Trong HKEY_LOCAL_MACHINE\SOFTWARE\PHP\Per Directory Values\c\WebHosting\TheirHost, tạo Key có Name: open_basedir, và Value: “C:\WebHosting\TheirHost“