2008-12-08 51 views
7

Tôi gặp sự cố với quá trình bắt đầu trong ngữ cảnh mạo danh trong ASP.NET 2.0.Quá trình bắt đầu và mạo danh

Tôi đang bắt đầu Quy trình mới trong mã dịch vụ web của mình. IIS 5.1, .NET 2,0

[WebMethod] 
public string HelloWorld() 
{ 
    string path = @"C:\KB\GetWindowUser.exe"; 
    ProcessStartInfo startInfo = new ProcessStartInfo(); 
    startInfo.WorkingDirectory = Path.GetDirectoryName(path); 
    startInfo.FileName = path; 
    startInfo.UseShellExecute = false; 
    startInfo.CreateNoWindow = true; 
    startInfo.ErrorDialog = false; 
    startInfo.RedirectStandardOutput = true; 
    startInfo.RedirectStandardError = true; 
    Process docCreateProcess = Process.Start(startInfo); 

    string errors = docCreateProcess.StandardError.ReadToEnd(); 
    string output = docCreateProcess.StandardOutput.ReadToEnd(); 
} 

Các "C: \ KB \ GetWindowUser.exe" là giao diện điều khiển ứng dụng có chứa đoạn mã sau:

static void Main(string[] args) 
{ 
    Console.WriteLine("Windows: " + WindowsIdentity.GetCurrent().Name); 
} 

Khi tôi gọi dịch vụ web mà không cần mạo danh, tất cả mọi thứ hoạt động tốt.

Khi tôi bật mạo danh, lỗi sau được viết bằng "lỗi" biến trong mã dịch vụ web:

Unhandled Exception: System.Security.SecurityException:. Truy cập bị từ chối \ r \ n \ r \ n tại System.Security.Principal.WindowsIdentity.GetCurrentInternal (TokenAccessLevels wantAccess, Boolean threadOnly) \ r \ n tại System.Security.Principal.WindowsIdentity.GetCurrent() \ r \ n tại ObfuscatedMdc.Program.Main (String [] args) \ r \ nMục của hội đồng thất bại là: \ r \ nMyComputer

Người dùng bị mạo danh là quản trị viên cục bộ và có quyền truy cập vào C: \ KB \ GetWindowUser.exe thực thi. nhắn

Khi tôi xác định người sử dụng cửa sổ một cách rõ ràng về tính chất ProcesStartInfo Domain, tài khoản và mật khẩu, tôi đã sau: http://img201.imageshack.us/img201/5870/pstartah8.jpg

Có thể bắt đầu quá trình với các thông tin khác so với ASPNET từ asp.net (IIS 5.1)?

+1

bất kỳ giải pháp cuối cùng với đầy đủ mẫu mã nguồn làm việc về nó? – Kiquenet

Trả lời

3

Bạn phải đặt mã đặc quyền vào GAC (hoặc chạy hoàn toàn).

Mã trong GAC phải xác nhận XXXPermission, trong đó XXX là quyền bạn đang yêu cầu, có thể là mạo danh, quyền truy cập vào ổ cứng hoặc những gì bạn có.

Bạn nên hoàn nguyên quyền xác nhận ngay sau mật khẩu.

Bạn nên đảm bảo rằng API trên DLL của bạn mà bạn đưa vào GAC không có cơ hội lạm dụng. Ví dụ: nếu bạn đang viết một trang web cho phép người dùng sao lưu máy chủ qua ứng dụng dòng lệnh, API của bạn nên hiển thị phương thức như "BackUp()" chứ không phải "LaunchAribitraryProcess (đường dẫn chuỗi)"

Web.tập tin cấu hình phải có thiết lập mạo danh là tốt, hoặc bạn sẽ chạy vào các vấn đề cho phép NTFS cũng như CAS.

Đây là complete explanation.

0

Chính xác thì bạn đang cố gắng làm gì? Tôi hoàn toàn không thể biết được điểm của mã của bạn là tạo ra một tệp thực thi khác. Trông khá kỳ quặc. Có lẽ nó sẽ hữu ích hơn để nêu vấn đề busines bạn đang cố giải quyết trước.

0

Dường như bạn đang cố gắng để dịch vụ IIS mạo danh người dùng có đặc quyền cao hơn bản thân dịch vụ (trong trường hợp này là quản trị viên). Windows chặn điều này như một lỗ hổng bảo mật, vì tại thời điểm đó, bạn về cơ bản đang cầu xin ai đó tiếp nhận hệ thống của bạn. Có thể có một cách để làm việc xung quanh giới hạn này, nhưng đừng làm điều đó - đó là vì lợi ích của riêng bạn.

Thay vào đó, có IIS mạo danh người dùng có quyền hạn chế, người có chính xác các quyền mà bạn cần nó có. Ví dụ. tạo tài khoản người dùng chỉ sở hữu các thư mục mà bạn muốn dịch vụ web của mình ghi vào hoặc bất kỳ sự kết hợp quyền nào khác phù hợp. Nếu mạo danh người dùng bị giới hạn, bạn sẽ không thấy mã lỗi này, nhưng vẫn có thể gọi khả năng thực thi lành tính mà bạn có ở đây.

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