Tôi đang bận cố gắng tìm hiểu các công cụ bảo mật trong C# và tôi đang cố gắng để xem Assert hoạt động như thế nào. Tôi đang sử dụng .net 3.5.Xác nhận quyền trong C#
Tôi đã tạo một ứng dụng mẫu để thử tìm hiểu điều này.
phương pháp Calling:
[FileIOPermission(SecurityAction.Deny, ViewAndModify = @"C:\")]
static void Main(string[] args)
{
WriteTest testWriter = new WriteTest();
testWriter.Test();
Console.Read();
}
Trong một thư viện lớp riêng biệt Tôi có:
public class WriteTest
{
public void Test()
{
try
{
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Write, @"C:\");
permission.Assert();
using (StreamWriter sw = new StreamWriter(@"C:\test.txt"))
{
sw.WriteLine("testing!");
sw.Flush();
}
Console.WriteLine("Writen to file!");
}
catch (SecurityException sec)
{
Console.WriteLine("No privileges!");
}
}
}
Mã này thực hiện tốt và tất cả. Nó sẽ ghi vào tập tin. Câu hỏi của tôi chính xác là nó hoạt động như thế nào? Điều này không làm mất hiệu lực các lớp bảo mật nếu tôi chỉ có thể khẳng định các quyền mà tôi muốn để bỏ qua các kiểm tra? Nếu tôi thay đổi Assert thành Demand, nó sẽ đưa ra một ngoại lệ.
Điểm của lớp bảo mật không cho phép tôi đặt quyền để khi tôi gọi một lớp bên thứ ba, tôi có thể ngăn không cho nó bị lừa đảo và làm những thứ tôi không muốn làm? Tôi biết nếu tôi tải dll trong một AppDomain tôi sẽ nhận được hiệu ứng này ngay cả khi bên thứ ba DLL không sử dụng Assert, nó chỉ có vẻ lạ rằng nếu tôi gọi nó trực tiếp nó sẽ làm việc. Tôi đã thử đọc tài liệu MSDN trên Assert nhưng tôi thấy khó hiểu.
Đảm bảo bạn cần hiểu mô hình bảo mật .NET 4 trước ... vì .NET 4.0 Code Access Security đã được đơn giản hóa. –