2010-06-18 25 views
18

Sau khi triển khai phiên bản mới của ứng dụng ASP.NET 2.0 của chúng tôi, nó bắt đầu tăng ngoại lệ bảo mật: „System.Security.SecurityException: Yêu cầu cho phép loại 'System.Web.AspNetHostingPermission, Hệ thống, Phiên bản = 2.0.0.0, Văn hóa = trung lập, PublicKeyToken = b77a5c561934e089' không thành công.Các ngoại lệ bảo mật trong ASP.NET và Tải hồ sơ người dùng tùy chọn trong IIS 7.5

Sau khi nghiên cứu nhanh trên internet, chúng tôi có thể giải quyết vấn đề này bằng cách đặt „Tải hồ sơ người dùng“ thành True trong hồ bơi ứng dụng IIS 7.5. Giải pháp này cũng được nhắc đến nhiều lần ở đây trên stackoverflow:

Tuy nhiên chúng tôi không thể tìm ra lý do tại sao nó phải là sự thật. Chúng tôi đã xem xét tất cả các thay đổi trong phiên bản mới (vui lòng chỉ có một vài), nhưng không tìm thấy bất kỳ điều gì đáng ngờ (không truy cập vào dữ liệu đăng ký hoặc tạm thời như một số bài viết được đề xuất, v.v.). Ai có thể cho chúng tôi gợi ý khi một ứng dụng ASP.NET được lưu trữ trong IIS 7.5 cần „Tải hồ sơ người dùng" tùy chọn thiết lập để đúng?

chi tiết:

  • Ứng dụng hồ bơi: .NET 2.0; Chế độ đường ống được quản lý - Cổ điển; Sắc - tùy chỉnh tài khoản miền
  • Trong IIS 6.0 (W2K3): Cũ và phiên bản mới của việc ứng dụng tốt
  • Trong IIS 7.5 (W2K8-R2): Phiên bản cũ của ứng dụng hoạt động tốt; phiên bản mới của ứng dụng tăng an ninh ngoại lệ - nó bắt đầu làm việc sau thiết lập “Load Hồ sơ người dùng” True

Cảm ơn bạn!

EDIT: Cuối cùng chúng tôi đã tìm thấy nguyên nhân của vấn đề này! Quản trị viên của chúng tôi đã sử dụng kỹ thuật khác nhau để sao chép phiên bản ứng dụng mới từ môi trường dàn dựng sang môi trường sản xuất. Ông đã sử dụng máy chủ web làm trung gian. Sau khi donwloading nén phát hành xây dựng hiện vật để môi trường sản xuất và sau đó giải nén các tập tin, họ vẫn còn được đánh dấu là "bị chặn" bởi vì họ đến từ máy tính khác nhau. Xem thêm https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a. ASP.NET sau đó logic thực thi các tệp nhị phân này trong phần tin cậy thay vì tin cậy hoàn toàn và thực sự đã gây ra các ngoại lệ bảo mật được đề cập trong ứng dụng của chúng tôi.

Đặt "Tải hồ sơ người dùng" thành True đã khắc phục ngoại lệ bảo mật dưới dạng tác dụng phụ. Nếu "Tải hồ sơ người dùng" được đặt thành Sai, thì ứng dụng của chúng tôi (không phải mã của chúng tôi, có thể là một số.NET BCL hoặc lắp ráp bên ngoài) đang cố gắng truy vấn thông tin cơ bản về thư mục "C: \ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Tệp Internet Tạm thời" mà danh tính của hồ bơi ứng dụng không được phép:

  • với niềm tin đầy đủ: access denied đến hoạt động truy vấn này không tăng bất kỳ ngoại lệ
  • với niềm tin phần: access denied đến hoạt động truy vấn này làm tăng an ninh ngoại lệ

Nếu "Load Hồ sơ người dùng" là được đặt thành True, khi đó hồ sơ tạm thời trong thư mục Users được tạo mỗi khi hồ bơi ứng dụng bắt đầu. Ứng dụng của chúng tôi sau đó đang cố truy vấn thông tin về thư mục "Tệp Internet Tạm thời" của tiểu sử này, danh tính của hồ bơi ứng dụng được phép. Do đó không có ngoại lệ nào được nâng lên ngay cả với sự tin tưởng một phần.

Phiên khắc phục sự cố thực sự thú vị! :)

+0

Cảm ơn công việc điều tra Peter, tôi đã gặp vấn đề tương tự và tiện ích suối (được liệt kê trong câu hỏi superuser.com) là cách tôi bỏ chặn tất cả các tệp trong thư mục webapp của tôi. Và bây giờ tôi có thể tắt tùy chọn Tải hồ sơ người dùng! –

+1

Hoàn toàn tuyệt vời, chúng tôi chỉ gặp phải vấn đề này và không thể giải thích đúng. –

+0

câu trả lời dưới đây có giải thích chi tiết http://stackoverflow.com/questions/17149132/what-exactly-happens-when-i-set-loaduserprofile-of-iis-pool –

Trả lời

7

Một ví dụ khác khi cài đặt "Tải hồ sơ người dùng" có thể giúp bạn sử dụng tệp tạm thời. Đôi khi việc sử dụng này có thể gián tiếp. Ví dụ, SQL Express có thể thực hiện điều này trong một số trường hợp.

Vì vậy, lời khuyên của tôi. Tắt "Tải hồ sơ người dùng" và kiểm tra% TEMP%. Sau đó cố gắng cung cấp cho tài khoản miền được sử dụng cho hồ bơi ứng dụng truy cập đầy đủ (hoặc thay đổi quyền truy cập) vào thư mục từ% TEMP%. Có lẽ nó sửa chữa vấn đề của bạn.

Một lời khuyên khác là sử dụng Trình theo dõi quy trình (xem http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) để định vị các phần hồ sơ người dùng sẽ được sử dụng (hoặc nhận lỗi "truy cập bị từ chối") tại thời điểm bạn nhận được yêu cầu "System.Security.SecurityException: sự cho phép của loại 'System.Web.AspNetHostingPermission' ngoại lệ.

+1

Cảm ơn lời khuyên của bạn. Nó đã giúp chúng tôi gỡ rối vấn đề. Bản sắc của hồ bơi ứng dụng cần đọc quyền truy cập vào thư mục "C: \ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Tệp Internet tạm thời". Ứng dụng này chỉ truy vấn thông tin cơ bản cho thư mục này và đó là nó. Có lẽ nó được gây ra bởi một trong những hội đồng bên ngoài mà chúng tôi sử dụng (chúng tôi nghi ngờ iTextSharp). Dù sao lời khuyên của bạn đã giúp chúng tôi giải thích tình hình, vì vậy cảm ơn bạn một lần nữa. – Peter

+0

Bạn chào mừng Peter! – Oleg

+0

Có thể đặt 'LoadUserProfile = true' trong IIS và thay đổi thư mục tạm thời mặc định% TEMP% từ' C: \ Users \ C: \ Users \ AccountName \ AppData \ Local \ Temp' sang một nơi khác? –

0

Khu vực khác nơi LoadUserProfile có thể trợ giúp là khi định cấu hình MSMQ tin cậy ràng buộc trong WCF. Nếu hồ bơi ứng dụng đang chạy dưới một tài khoản đáng tin cậy, điều này sẽ không tải SID trừ khi cài đặt hồ sơ người dùng tải hồ sơ người dùng được đặt thành true và do đó xác thực sẽ không thành công.

1

Tôi cũng gặp sự cố tương tự và có thể khắc phục sự cố bằng cách đặt cấu hình người dùng tải = true. Tuy nhiên tôi đã hoàn nguyên hồ sơ người dùng tải = sai và khởi động lại hồ bơi ứng dụng nhưng bây giờ tôi không nhận được bất kỳ ngoại lệ. Tôi đã đi qua tất cả các bài viết relavents trên stackoverflow và cũng trên các trang diễn đàn Asp.net và iis.

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