2011-11-07 34 views
7

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ọ.

+0

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

Trả lời

2

Bạn đã cân nhắc triển khai xác thực người dùng bằng cách sử dụng mod_auth? Nếu bạn quyết định dùng thử, có một số guide mà bạn có thể thấy hữu ích.

Apache 2.2 tương đương:

Lưu ý rằng trình duyệt lưu trữ các thông tin, và gửi chúng trong tiêu đề với tất cả các yêu cầu bạn thực hiện.

+0

Tôi không chắc chắn nếu đây là những gì tôi đang tìm kiếm, trong mọi trường hợp, nó dường như bị ngưng "Khả năng tương thích: Chỉ khả dụng trong các phiên bản trước 2.1" – puk

+0

Đó là chỉ vì nó được thay thế bằng các mô-đun cụ thể hơn một chút, như [mod_auth_basic] (http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html). Nếu đó không phải là những gì bạn đang tìm kiếm, thì đừng lo lắng, chỉ nghĩ rằng nó có thể giúp đỡ. –

+0

để tôi có một cái nhìn khác. – puk

Các vấn đề liên quan