Có một số lớp mà bạn cần bảo vệ.
Một số máy chủ lưu trữ không chính xác dựa vào các "biện pháp bảo vệ" PHP như open_basedir, safe_mode (PHP cũ hơn), disable_functions, v.v.
Ngay cả PHP cũng KHÔNG coi chúng là các tính năng bảo mật - http://php.net/security- note.php
Những điều này có thể bị vô hiệu hóa với bất kỳ hoạt động khai thác nào dành cho PHP và sau đó toàn bộ hệ thống sẽ bị tiêu diệt, không làm điều đó.
Nó nên được thực hiện như thế nào
dưới cùng
- Tách biệt người dùng cấp hệ điều hành / hệ thống cho từng trang web được lưu trữ
- quyền chính xác (một người không thể xem / chỉnh sửa trang của người kia) - cũng đảm bảo rằng các thư mục con có quyền chính xác vì chúng sẽ giống nhau
- các tệp phiên riêng biệt (RẤT NHIỀU webhosting đặt các tệp phiên của mỗi trang web được lưu trữ bằng PHP vào cùng một thư mục, điều đó rất tệ, tệ thật!
Apache cuối cùng đã có mô-đun riêng cho việc này - Apache MPM-ITK .
Truyện dài: hình dung điều này giống như bạn cung cấp cho người dùng một shell trên máy (dưới uid của chính anh ta) - anh ta không thể thực hiện bất kỳ điều gì với các trang web được lưu trữ khác.
- uid / gid khác nhau
- quyền hệ thống
- framworks như SELinux, AppArmor và tương tự
- grsecurity nếu bạn muốn trở nên mạnh mẽ hơn .. nhưng hệ thống sẽ khó bảo trì hơn.
tăng lên?
Bạn có thể nhận được nhiều lõi cứng hơn. Điều tốt nhất tôi đã thấy là một thư viện chia sẻ cho apache (hoặc bất cứ thứ gì bạn sử dụng) - được sử dụng khi apache được khởi động bằng LD_PRELOAD
và nó thực hiện tất cả các lệnh gọi hệ thống độc hại tiềm ẩn như system()
, execve()
và về cơ bản bất kỳ lệnh gọi nào khác mà bạn thấy không hợp lệ.
Tôi chưa thấy cách triển khai này tốt ở đó (ngoài những cái tùy chỉnh ở đâu đó) - hãy sửa cho tôi nếu tôi sai.
Đảm bảo thực hiện một danh sách trắng cho việc này, chẳng hạn như. mail () trong PHP thực thi sendmail theo mặc định và điều đó sẽ không hoạt động nữa.
bao gồm
Thêm disable_functions cổ điển, open_basedir, v.v. vào global php.ini, thêm session.save_path vào mỗi vhost - đưa các phiên vào thư mục người dùng. Đảm bảo người dùng không chia sẻ bất kỳ thứ gì .
Thực hiện phân tách cấp độ hệ điều hành lớp dưới một cách chính xác.
Trở nên mạnh mẽ với các lệnh gọi hệ thống nối lib grsec và LD_PRELOAD.
Tách, tách, tách .. các hệ thống đủ sớm như Docker sẽ cung cấp các vùng chứa dựa trên LXC để tách người dùng ở cấp nhân nhưng nó vẫn chưa sẵn sàng sản xuất (imho).