2008-08-20 20 views
6

Tôi có một tập lệnh PHP chạy như một chương trình CGI và tiêu đề HTTP Authenticate được ăn và nhổ ra. Vì vậy, tôi muốn thực hiện một số loại xác thực dựa trên MẪU. Là một ràng buộc bổ sung, không có cơ sở dữ liệu nên không có dữ liệu phiên nào có thể được lưu trữ.Bạn sẽ triển khai xác thực dựa trên MẪU như thế nào mà không có cơ sở dữ liệu sao lưu?

Tôi rất cởi mở khi có tên người dùng và mật khẩu chính. Tôi chỉ cần bảo vệ ứng dụng khỏi kẻ xâm nhập không biết những thông tin đăng nhập này.

Vậy bạn sẽ triển khai điều này như thế nào?

Cookie?

Tôi có thể trình bày biểu mẫu và nếu nó xác thực, tôi có thể gửi lại cookie là mã băm của địa chỉ IP đến mã bí mật. Sau đó, tôi có thể ngăn các trang hiển thị trừ khi điều giải mã chính xác. Nhưng tôi không có ý tưởng làm thế nào để thực hiện điều đó trong PHP.

+0

Bạn nên sử dụng lại khung xác thực hiện tại bất cứ khi nào có thể, bởi vì, thực sự, nó phức tạp. Ví dụ, hãy xem https://github.com/delight-im/PHP-Auth Điều này có thể được sử dụng với SQLite như một kho lưu trữ dữ liệu sao lưu tối thiểu. Nếu bạn * thực sự * không muốn có cơ sở dữ liệu nào cả, hãy thử HTTP Basic Auth hoặc lưu trữ dữ liệu người dùng của bạn trong một tệp phẳng. Nhưng tôi không thấy lý do nào khiến bạn không thể sử dụng SQLite hay cái gì khác. – caw

Trả lời

5

Một vài cách bạn có thể thực hiện việc này.

  1. htaccess - yêu cầu xử lý máy chủ web của bạn bảo mật các trang được đề cập (không chính xác dựa trên mẫu cgi).
  2. Sử dụng cookie và một số loại thuật toán băm (md5 đủ tốt) để lưu trữ mật khẩu trong tệp phẳng nơi mỗi dòng trong tệp là tên người dùng: passwordhash. Đảm bảo rằng bạn có salt băm của mình để tăng thêm độ an toàn so với bảng cầu vồng. (Phương pháp này hơi ngây thơ ... có thể là rất cẩn thận với bảo mật nếu bạn đi theo tuyến đường này)
  3. sử dụng một cái gì đó như cơ sở dữ liệu sqlite chỉ để xử lý xác thực. Sqlite là nhỏ gọn và đơn giản, đủ để nó vẫn có thể đáp ứng nhu cầu của bạn ngay cả khi bạn không muốn một backend db lớn.

Về mặt lý thuyết, bạn cũng có thể lưu trữ dữ liệu phiên trong tệp phẳng, ngay cả khi bạn không có cơ sở dữ liệu.

-1

... Về muối, thêm tên người dùng vào muối băm sẽ ngăn người nào biết muối của bạn và có quyền truy cập vào tệp mật khẩu của bạn để viết bảng cầu vồng và số mật khẩu của người dùng.

1

Nếu bạn hiện đang sử dụng Authenticate, thì có thể bạn đã có một tệp htpasswd. Nếu bạn muốn tiếp tục sử dụng tệp đó, nhưng chuyển sang sử dụng xác thực dựa trên FORM thay vì qua tiêu đề Xác thực, bạn có thể sử dụng tập lệnh PHP để sử dụng cùng một tệp htpasswd và sử dụng phiên để duy trì trạng thái xác thực.

Tìm kiếm nhanh trên Google cho php htpasswd tiết lộ this page bằng chức năng PHP để kiểm tra bằng chứng xác thực đối với htpasswd. Bạn có thể tích hợp nó (giả sử bạn có phiên được đặt thành tự khởi động) với một số mã như sau:

// At the top of your 'private' page(s): 
if($_SESSION['authenticated'] !== TRUE) { 
    header('Location: /login.php'); 
    die(); 
} 

// the target of the POST form from login.php 
if(http_authenticate($_POST['username'], $_POST['password'])) 
    $_SESSION['authenticated'] = TRUE; 
1

Bạn có thực sự cần biểu mẫu không? Không có vấn đề gì bạn làm, bạn bị giới hạn bởi tên người dùng và mật khẩu được biết đến. Nếu họ biết điều đó, họ sẽ nhận được cookie phép thuật của bạn cho phép họ. Bạn muốn ngăn không cho họ xem các trang nếu họ không biết bí mật và ủy quyền cơ bản thực hiện điều đó, rất dễ thiết lập và không yêu cầu nhiều công việc từ phía bạn.

Bạn có thực sự cần xem tiêu đề Cấp quyền nếu máy chủ web quản lý kiểm soát truy cập cho bạn không?Ngoài ra, nếu bạn đang cung cấp ứng dụng cho một danh sách người được biết (thay vì công khai), bạn có thể cung cấp quyền truy cập dựa trên máy chủ trên các yếu tố khác, chẳng hạn như địa chỉ IP đến, chứng chỉ ứng dụng khách và nhiều những thứ khác là vấn đề cấu hình hơn là lập trình. Nếu bạn giải thích các ràng buộc về bảo mật của mình, chúng tôi có thể cung cấp giải pháp tốt hơn.

Chúc may mắn, :)