Cách tính năng đăng nhập như được thiết kế để sử dụng quyền của tệp suPHP. Ví dụ: nếu tôi có trang web tại www.example.com
và hai người dùng sau đây có thư mục chính của riêng họ, mỗi thư mục có một tập lệnh php test.php
và một tập lệnh validateUser.php
thuộc về người dùng khác (root, www-data, apache ...) thư mục /home
.Thực hiện đăng nhập cùng với suPHP
/home/ ├── validateUser.php ├── user1 │ └── test.php └── user2 └── test.php
user1
có thể truy cập user2's
kịch bản bằng cách truy cập www.example.com/user2/test.php
, và ngược lại. Thay vào đó những gì tôi muốn, là kênh tất cả các yêu cầu đến, sử dụng một cái gì đó như mod_rewrite, đến validateUser.php
. Tuy nhiên, làm như vậy sẽ có hậu quả của việc thực thi tất cả các tập lệnh là chủ sở hữu của validateUser.php
, không phải là tập lệnh mục tiêu test.php
.
Có cách nào để gọi tập lệnh php trước khi suPHP khởi động và sau đó cho phép suPHP tiếp tục hoặc hủy hoàn toàn.
EDIT Đây là tiền thưởng thứ hai tôi đưa lên. Việc đầu tiên tôi đã cho Gustav b/c ông đã cho một tốt partial answer. Tôi sẽ đề cập đến những gì tôi đã cố gắng cho đến nay, và tại sao không ai trong số họ làm việc cho tôi.
1) Tôi đã thử sử dụng mod_rewrite để chuyển hướng URL đến validateUser.php
để đăng nhập người dùng hoặc gọi bất kỳ tập lệnh nào họ muốn gọi. Vấn đề là tôi đã thiết lập các máy chủ ảo của mình sao cho mỗi người dùng có trang web ảo riêng của họ (ví dụ: www.user1.example.com
, www.user2.example.com
... nếu đây là phương pháp thiết kế xấu, vui lòng chỉ ra một cách thô lỗ). Do đó, mặc dù hệ điều hành thấy cấu trúc tập tin như trên, trực tuyến, các thư mục gốc được thiết lập như vậy
VirtualHost = www.user1.example.com
├── validateUser.php
└── test.php
VirtualHost = www.user2.example.com
├── validateUser.php
└── test.php
Đương nhiên tôi chỉ di chuyển một bản sao của validateUser.php
vào thư mục của mỗi người dùng. Vấn đề là bây giờ người dùng có thể xóa tập tin đó và đặt bất cứ điều gì họ muốn trong đó, như không yêu cầu đăng nhập ở tất cả. Một cách xung quanh điều này là để làm cho các thư mục nhà dính (không phải cái gì tôi sẽ bao giờ khuyên bạn nên làm cho một thư mục nhà) và làm cho validateUser.php
thuộc sở hữu của root. Nhưng bây giờ nó sẽ thực thi AS root vì đây là suPHP. Đó là nơi tôi đã từ bỏ.
2) Tôi có thể sử dụng đề xuất của mod_auth
của Gustav, nhưng tôi không thích nó yêu cầu mật khẩu lên phía trước (như các trang web cũ của trường).
3) Tôi đã coi biến thể là 1) nếu tôi có thể chuyển hướng giữa các máy chủ ảo. Ví dụ, cơ cấu lại các máy ảo như vậy
VirtualHost = www.user1.example.com
└── test.php
VirtualHost = www.user2.example.com
└── test.php
VirtualHost = www.admin.example.com
└── validateUser.php
Sau đó sử dụng mod_rewrite để chuyển hướng tất cả lưu lượng từ người dùng tới www.admin.example.com/validateUser.php
, và nếu người dùng đang đăng nhập (hoặc nếu đăng nhập thành công) người dùng sẽ được chuyển hướng trở lại trang web ban đầu họ đã cố gắng đăng nhập vào. Lợi ích của điều này, nếu nó thậm chí là có thể, là suPHP sẽ không kick cho đến khi người dùng được chuyển hướng trở lại máy chủ ảo của riêng họ.
Tôi khá tự tin câu hỏi của mình không có giải pháp http://stackoverflow.com/a/9561335/654789 – puk