2009-07-18 41 views
6

Tôi đang sử dụng VSTS 2008 + .Net 2.0 + C#. Và tôi đang chạy Code Analysis sau khi build. Tôi nhận được cảnh báo bảo mật khó hiểu sau đây. Đây là cảnh báo và mã liên quan, bất kỳ ý tưởng gì là sai? Nếu có cảnh báo bảo mật, cách khắc phục?cảnh báo bảo mật này có nghĩa là gì (lớp .Net Process)?

System.Diagnostics.Process myProcess = new System.Diagnostics.Process(); 
myProcess.StartInfo.FileName = "IExplore.exe"; 
myProcess.StartInfo.Arguments = @"default.html"; 
myProcess.StartInfo.Verb = "runas"; 
myProcess.Start(); 

cảnh báo: CA2122: Microsoft.Security: 'TestHtml()' gọi vào 'Process.Start()' trong đó có một LinkDemand. Bằng cách thực hiện cuộc gọi này, 'Process.Start()' được tiếp xúc gián tiếp với mã người dùng. Xem lại ngăn xếp cuộc gọi sau có thể vạch trần một cách để phá vỡ bảo vệ an ninh:

Trả lời

11

Phương thức của bạn gọi Foo gọi điện đến một Process.Start được bảo vệ bởi yêu cầu liên kết cho Tin cậy đầy đủ. Để tránh các vấn đề mà FxCop cảnh báo bạn, bạn nên thêm một yêu cầu liên kết hoặc nhu cầu đầy đủ cho các quyền tương tự cho phương pháp của bạn.

Bạn có thể sửa chữa nó bằng cách thêm vào phương pháp của bạn

[PermissionSetAttribute(SecurityAction.LinkDemand, Name="FullTrust")] 

Xem thông tin http://msdn.microsoft.com/en-us/library/970x52db.aspx

+0

Cảm ơn, nhưng mã của bạn có xây dựng lỗi. Lỗi Tên 'True' không tồn tại trong ngữ cảnh hiện tại. Bất kỳ ý tưởng? Tôi đang sử dụng. Net 2.0 và .Net 2.0 không hỗ trợ nó? – George2

+0

Hi blowdart, tôi có một số ý tưởng mới và tôi nghĩ rằng nó không phải là một lỗ hổng bảo mật. Giả sử phương thức Foo gọi TestHtml và TestHtml gọi Process.Start. Ngay cả khi TestHtml không được kích hoạt với LinkDemand, thì Process.Start được kích hoạt với LinkDemand, nó sẽ luôn kiểm tra sự cho phép của TestHtml (TestHtml là người gọi ngay lập tức). Vì vậy, ngay cả khi Foo không có đủ quyền, cuộc gọi từ TestHtml tới Process.Start sẽ không thành công. Vì vậy, tôi nghĩ rằng không có vấn đề an ninh. Có ý kiến ​​gì không? – George2

+1

@George, chỉ cần đoán bây giờ, nhưng nó sẽ là tốt hơn để kiểm tra các yêu cầu bảo mật càng sớm càng tốt, nếu TestHtml sẽ thay đổi bất kỳ trạng thái ứng dụng trước khi thất bại. – sisve

1
+0

Cảm ơn Kb, các tài liệu bạn đề nghị rất hữu ích. Tôi muốn xác nhận xem sự hiểu biết của tôi có chính xác hay không. Tôi nghĩ rằng nguyên nhân gốc rễ là Process.Start cần liên kết nhu cầu (kiểm tra quyền cho người gọi ngay), nhưng phương pháp TestHtml tôi thực hiện không kiểm tra quyền cho người gọi ngay, vì vậy có một lỗ hổng bảo mật mà người gọi ngay lập tức của TestHtml có thể không có đủ sự cho phép, đó là sự hiểu biết chính xác? – George2

+1

@ George2: Như tôi đã hiểu, bạn đã đúng. Process.Start đã khai báo một kiểm tra bảo mật. Người gọi phải khai báo cùng một kiểm tra bảo mật hoặc đảm bảo rằng bảo mật sẽ không bị vi phạm (và sau đó bỏ qua kiểm tra). –

+0

Cảm ơn Kb, tôi có một số ý tưởng mới và tôi nghĩ đó không phải là một lỗ hổng bảo mật. Giả sử phương thức Foo gọi TestHtml và TestHtml gọi Process.Start. Ngay cả khi TestHtml không được kích hoạt với LinkDemand, thì Process.Start được kích hoạt với LinkDemand, nó sẽ luôn kiểm tra sự cho phép của TestHtml (TestHtml là người gọi ngay lập tức). Vì vậy, ngay cả khi Foo không có đủ quyền, cuộc gọi từ TestHtml tới Process.Start sẽ không thành công. Vì vậy, tôi nghĩ rằng không có vấn đề an ninh. Có ý kiến ​​gì không? – George2

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