2009-03-11 24 views
7

Tôi đã tạo một số tài nguyên mạng nội bộ dựa trên PHP yêu cầu người dùng đăng nhập. Người dùng tạo thông tin đăng nhập của riêng họ và tôi xác minh rằng họ đã đăng nhập bằng cookie.Intranet PHP có thể chia sẻ thông tin đăng nhập Windows không?

Tôi đã được hỏi liệu tôi có thể liên kết thông tin đăng nhập đó với thông tin đăng nhập Windows của họ thay thế hay không. Phản ứng ban đầu của tôi là "một trang web không thể truy cập vào đăng nhập Windows của bạn - đó sẽ là một nguy cơ bảo mật." Tuy nhiên, một trong các bộ phận của chúng tôi sử dụng Sharepoint và thực tế nó lại tự gắn với đăng nhập Windows.

Làm thế nào được thực hiện? Tôi có thể làm điều đó trong PHP? Nếu vậy, tại sao nó không phải là một lỗ hổng bảo mật khủng khiếp?

Trả lời

8

gì bạn đang tìm kiếm là NTLM xác thực chống lại các trang web PHP, đó là hoàn toàn khả thi nhưng dường như không có cách nào duy nhất trong PHP để làm điều đó.

Có một cái nhìn tại http://siphon9.net/loune/2007/10/simple-lightweight-ntlm-in-php/

Bạn cũng cần phải thêm các trang web để trang web tin cậy của bạn trong IE (hoặc tương đương trong bất cứ trình duyệt bạn đang sử dụng) và trong các thiết lập cho các trang web đáng tin cậy, bật 'gửi hiện tại tên người dùng và mật khẩu '.

Lỗ hổng bảo mật không phải là khủng khiếp vì thông tin đăng nhập không được gửi qua clair qua dây và người dùng cuối đã thông báo cụ thể cho trình duyệt gửi thông tin đăng nhập tới trang web được đề cập.

5

PHP có hỗ trợ LDAP, vì vậy bạn có thể truy cập Windows Active Directory

Có dự án này trên SourceForge: adLDAP - "Xác thực LDAP với PHP cho Active Directory"

4

Thông thường thời gian này được thực hiện bằng cách sử dụng kết hợp LDAP và NTLM. Các trình duyệt như IE và Firefox có thể thực hiện xác thực NTLM, mà tôi tin là Sharepoint hoạt động như thế nào. Tôi chạy một ứng dụng cổng thông tin dựa trên Java sử dụng LDAP để đồng bộ hóa người dùng và NTLM để xác thực.

Điều bạn hoàn toàn không muốn làm là yêu cầu người dùng nhập tên người dùng và mật khẩu tên miền của họ vào trình duyệt. Trong những năm qua, tôi đã thấy một số dự án sử dụng phương pháp này với LDAP để xác thực người dùng Windows. Bạn đúng, nó là một mối quan tâm an ninh. Người dùng chỉ nên nhập mật khẩu của mình một lần: khi đăng nhập vào máy trạm. Điều cuối cùng bạn muốn là mật khẩu nằm xung quanh trong các tập tin cache/temp.

Tôi xin lỗi vì tôi không thể cung cấp câu trả lời "dưới đây là cách bạn thực hiện với ứng dụng PHP". Theo như tôi biết, không có ai trả lời cho vấn đề này.

(Một điều tôi đã làm trong quá khứ và tôi chưa bao giờ thực sự kiểm tra xem biểu mẫu đó có hợp lệ hay nghèo hay không, là sử dụng PHP từ IIS. Nếu bạn đang sử dụng IIS, thì PHP sẽ điền biến máy chủ REMOTE_USER với tên người dùng Windows (DOMAIN \ user). Nó hoạt động cho những gì tôi đang làm vào thời điểm đó.)

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