»-(¯`v´¯)-»Diễn Đàn Trường Công Nghệ Thông Tin Thái Nguyên»-(¯`v´¯)-»
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

»-(¯`v´¯)-»Diễn Đàn Trường Công Nghệ Thông Tin Thái Nguyên»-(¯`v´¯)-»

.:hix lâu không làm web.nên giờ lười làm quá.dùng tạm cái Forum việt vậy.chủ yếu là chất lượng Những bài viết thôi đúng không.thật THà là nói hết không giấu diếm nhưng học xong cấm nghịch bậy..http://guichonguoiay.net.tf web mình đó RỖI VÀO CHơi Ha.hjhj:.
 
Trang ChínhPortalGalleryTìm kiếmLatest imagesĐăng kýĐăng Nhập
Thông Tin Cực Sock Cho Những Ai Nghiện Game Audition Của Thái Nguyên.Sau Một Thời Gian Tìm Hiểu Mà Nhờ Mấy Anh Ở forum ClbGame Mình Đã Cài THành Công Bản Audition Offline THái Nguyên.Sắp Tới Mình Sẽ Đưa Lên Online.Các Bạn Muốn Chơi Game Và Muốn Sở Hữu Những Bộ Đồ Đẹp Nhất Không Còn Chần Chừ Gì Nữa Mà Không Click Chuột Để Truy Cập Trang Web wWw.AuTn.tk Để Download Và Thưởng thức
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Latest topics
Navigation
 Portal
 Diễn Đàn
 Thành viên
 Lý lịch
 Trợ giúp
 Tìm kiếm
Diễn Đàn
Affiliates
free forum

Diễn Đàn

 

 Security permissions in .NET framework

Go down 
Tác giảThông điệp
Admin
Admin



Tổng số bài gửi : 136
Join date : 13/03/2010

Security permissions in .NET framework Empty
Bài gửiTiêu đề: Security permissions in .NET framework   Security permissions in .NET framework Icon_minitimeTue Mar 16, 2010 9:51 pm

Security permissions in .NET framework



Hầu hết các nhà phát triển ứng dụng và phát triển thành phần phần mềm sẽ không cần thiết làm một công việc đặt biệt nào khi làm việc với hệ thống bảo mật của bộ khung .NET ( .NET Framework security system ) mà sẽ được lợi ích nhiều từ sự bảo vệ an toàn mà nó cung cấp.
Một ngoại lệ đòi hỏi phải có chiều sâu về kiến thức và sự cân nhắc đặt biệt của hệ thống bảo mật từ những thư viện an toàn bảo mật. Những chương trình này miêu tả ranh giới giữa chương trình quản lý bảo mật ( secure managed ) và chương trình không bị giới hạn ( unrestricted ). Những thư viện tiêu biểu phải có độ tin cậy cao khi sử dụng và chiếm vị trí quan trọng trong việc quản lý chương trình nơi mà một lỗi trong lập trình có khả năng bộc lộ những lỗ hổng, chổ yếu bảo mật. Những chương trình bảo mật truy cập không thể loại trừ tất cả các khả năng gây ra lỗi của con người, nhưng nó sẽ so sánh các phiên bản chương trình ứng dụng với những thư viện an toàn ( secure libraries ).

Security
An toàn bảo mật trong bộ khung .NET sẽ bảo vệ chương trình và dữ liệu nếu nó được dùng với mục đích sai hoặc bị gây hại nguy hiểm bởi những đoạn chương trình khác bằng cách thi hành những giới hạn an toàn trên những chương trình được quản lý. Khi một ứng dụng của bộ khung .NET có yêu cầu về quyền ( permission ) thì chính sách bảo mật sẽ được thiết lập bới những sự cấp phép của người quản trị và sẽ cho phép hoặc không cho phép thi hành chương trình đó. Độ tin cậy sẽ dựa trên bằng chứng của chương trình như một chữ ký điện tử, một dấu hiện số, khi chương trình đã được chấp nhận thì hiệu lực quyền bảo mật sẽ điều khiển cho phép thi hành chương trình.
Permission
An toàn trong bộ khung .NET cho phép chương trình được sử dụng những tài nguyên bảo vệ nếu và chỉ nếu nó được cấp quyền để làm điều đó " permissions ". Bộ khung .NET sử dụng khái niệm "permission" để miêu tả quyền mà chương trình có khả năng truy cập tài nguyên bảo vệ. Khi chương trình có yêu cầu những permission mà nó cần thiết và những chính sách bảo mật của thư viện bảo mật thì bộ khung .NET sẽ xác định permission mà chương trình thật sự được cho phép.
Bộ khung .NET cung cấp cho chương trình được phép truy cập các lớp permission, mỗi gói ( encapsulate ) sẽ có khả năng truy cập một vùng tài nguyên. Sử dụng những permission để ra dấu hiệu cho .NET Framework biết chương trình sẽ cần cấp những quyền gì hay chương trình được cho phép làm những công việc gì, và để thực hiện việc ra dấu hiệu thì những lời gọi của chương trình sẽ phải được ủy quyền để làm điều đó. Những cách giải quyết vấn đề cũng sử dụng những đối tượng để xác định những permision nào cần thiết cấp phép cho một chương trình

Demanding Security Permissions in .NET Framework

Có hai cách thức để thực hiện lời gọi yêu cầu quyền bảo mật an toàn trong .NET Framework
Imperatively: Sử dụng những lời gọi từ những lớp permission có trong .NET Framework
Declaratively: Sử dụng những thuộc tính an toàn của permission


Sau đây sẽ dẫn ra hai ví dụ thực hiện lời gọi từ chối những chương trình không được quản lý bởi bộ khung .NET được viết bằng C#:

Ví dụ 1:
// Imperatively: Sử dụng những lời gọi từ những lớp permission có trong .NET Framework
// ImperativeSecurity.cs
using System;
using System.Security;
using System.Security.Permissions;
using System.Runtime.InteropServices;

class NativeMethods
{
/* Đây là một lời gọi đến unmanaged code. Thi hành phương thức này phụ thuộc vào UnmanagedCode security permission. Khi không có permission thì chương trình sẽ cố gắng gọi phương thức này và đưa ra một SecurityException:*/
[DllImport("msvcrt.dll")]
public static extern int puts(string str);
[DllImport("msvcrt.dll")]
internal static extern int _flushall();
}

class MainClass
{
private static void CallUnmanagedCodeWithoutPermission()
{
// Tạo một đối tượng permission an toàn để miêu tả UnmanagedCode permission:
SecurityPermission perm =
new SecurityPermission(SecurityPermissionFlag.Unmanage dCode);

/* Từ chối UnmanagedCode từ những permission đang thiết lập. Bất kỳ một phương thức nào được gọi trên tiến trình này cho đến khi phương thức kết thúc thì sẽ bị từ chối truy cập đến unmanaged code. Dù cho phương thức CallUnmanagedCodeWithPermission được gọi từ một stack frame đã chuẩn bị gọi quyền ( Assert ) cho unmanaged code, và vẫn không thể gọi chương trình này ( code ). Bởi vì ở đây dùng Deny, permission bị ghi chồng.*/
perm.Deny();

try
{
Console.WriteLine("Attempting to call unmanaged code without permission.");
NativeMethods.puts("Hello World!");
NativeMethods._flushall();
Console.WriteLine("Called unmanaged code without permission. Whoops!");
}
catch (SecurityException)
{
Console.WriteLine("Caught Security Exception attempting to call unmanaged code.");
}
}

private static void CallUnmanagedCodeWithPermission()
{
// Tạo một security permission object để miêu tả UnmanagedCode permission:
SecurityPermission perm =
new SecurityPermission(SecurityPermissionFlag.Unmanage dCode);

/* Kiểm tra permission để truy cập unmanaged code. Nếu không có permission để truy cập unmanaged code, thì lời gọi này sẽ đưa ra một SecurityException. Dù là khi phương thức CallUnmanagedCodeWithPermission được gọi từ một stack frame đã chuẩn bị gọi quyền ( Assert ) cho unmanaged code, và vẫn không thể gọi chương trình này ( code ). Bởi vì ở đây dùng Deny, permission bị viết chồng.*/

perm.Assert();

try
{
Console.WriteLine("Attempting to call unmanaged code with permission.");
NativeMethods.puts("Hello World!");
NativeMethods._flushall();
Console.WriteLine("Called unmanaged code with permission.");
}
catch (SecurityException)
{
Console.WriteLine("Caught Security Exception attempting to call unmanaged code. Whoops!");
}
}

public static void Main()
{
/* Chính bản thân phương thức sẽ gọi security permission Deny cho unmanaged code, và sẽ ghi chồng lên Assert permission trong stack frame.*/
SecurityPermission perm = new
SecurityPermission(SecurityPermissionFlag.Unmanage dCode);
perm.Assert();
CallUnmanagedCodeWithoutPermission();

/* Chính phương thức sẽ gọi security permission Assert cho unmanaged code, và sẽ ghi chồng lên Deny permission trong stack frame.*/
perm.Deny();
CallUnmanagedCodeWithPermission();
}
}

Output
Attempting to call unmanaged code without permission.
Caught Security Exception attempting to call unmanaged code.
Attempting to call unmanaged code with permission.
Hello World!
Called unmanaged code with permission.

Ví dụ 2
// Declaratively: Sử dụng những thuộc tính an toàn của permission
// DeclarativeSecurity.cs
using System;
using System.Security;
using System.Security.Permissions;
using System.Runtime.InteropServices;

class NativeMethods
{
/* Gọi đến unmanaged code. Thi hành phương thức đòi hỏi UnmanagedCode security permission. Nếu không có permission, thì sẽ đưa ra một ngoại lệ SecurityException:*/
[DllImport("msvcrt.dll")]
public static extern int puts(string str);
[DllImport("msvcrt.dll")]
internal static extern int _flushall();
}

class MainClass
{
/*Security permission được gắn vào phương thức này sẽ từ chối permission của UnmanagedCode từ những thiết lập của những permission hiện tại trong khi lời gọi phương thức có hiệu lực, thậm chí khi phương thức CallUnmanagedCodeWithoutPermission được gọi từ stack frame đã sẵn sàng gọi quyền cho unmanaged code, thì ta vẫn không thể gọi cái mã này, bởi vì hàm này được gắn với Deny permission cho unmanaged code, permission được ghi chồng.*/
[SecurityPermission(SecurityAction.Deny, Flags =
SecurityPermissionFlag.UnmanagedCode)]
private static void CallUnmanagedCodeWithoutPermission()
{
try
{
Console.WriteLine("Attempting to call unmanaged code without permission.");
NativeMethods.puts("Hello World!");
NativeMethods._flushall();
Console.WriteLine("Called unmanaged code without permission. Whoops!");
}
catch (SecurityException)
{
Console.WriteLine("Caught Security Exception attempting to call unmanaged code.");
}
}

/*security permission được gắn vào phương thức này sẽ bắt buộc kiểm tra thực thi cho unmanaged code permission bất cứ khi nào phương thức được gọi. Nếut lời gọi không có unmanaged code permission, thì lời gọi sẽ tạo ra một Security Exception. Thậm chí khi phương thức CallUnmanagedCodeWithPermission được gọi từ một stack frame sẵn sàng gọi Deny cho unmanaged code, nó sẽ không ngăn chặn ta từ lời gọi. Bởi vì phương thức này được gắn với Assert permission cho unmanaged code, permission đã được ghi chồng.*/
[SecurityPermission(SecurityAction.Assert, Flags =
SecurityPermissionFlag.UnmanagedCode)]
private static void CallUnmanagedCodeWithPermission()
{
try
{
Console.WriteLine("Attempting to call unmanaged code with permission.");
NativeMethods.puts("Hello World!");
NativeMethods._flushall();
Console.WriteLine("Called unmanaged code with permission.");
}
catch (SecurityException)
{
Console.WriteLine("Caught Security Exception attempting to call unmanaged code. Whoops!");
}
}

public static void Main()
{
SecurityPermission perm = new
SecurityPermission(SecurityPermissionFlag.Unmanage dCode);

/* Chính bản thân phương thức được gắn với security permission Deny cho unmanaged code sẽ ghi chồng lên Assert permission trong stack frame này.*/
perm.Assert();
CallUnmanagedCodeWithoutPermission();

/* Phương thức được gắn với security permission Assert cho unmanaged code sẽ ghi chồng lên Deny permission trong stack frame.*/
perm.Deny();
CallUnmanagedCodeWithPermission();
}
}

Output
Attempting to call unmanaged code without permission.
Caught Security Exception attempting to call unmanaged code.
Attempting to call unmanaged code with permission.
Hello World!
Called unmanaged code with permission.

Security and Performance

Hệ thống bảo mật của bộ khung .NET có khả năng ngăn chặn những đoạn mã có tính chất gây nguy hiểm được tải xuống từ mạng nằm trong máy tính. Tuy nhiên những công việc kiểm tra an toàn này có thể không được thực hiện, thậm chí khi đoạn mã không bao giờ đưa ra một ngoại lệ an toàn bảo mật nào.
Thông thường ngôn ngữ thi hành chung ( common language runtime ) sẽ xác minh lời gọi từ những đoạn mã của một phương thức không được quản lý, những phương thức này không có những đoạn mã quản lý truy cập permission. Điều này có thể sẽ gây rất nhiều khó khăn cho ứng dụng khi thực hiện những lời gọi những đoạn mã không được quản lý. SuppressUnmanagedCodeSecurityAttribute sẽ thay thế cho vần đề mặc định này. Khi một phương thức được gắn thuộc tính này ( SuppressUnmanagedCodeSecurityAttribute ), yêu cầu bảo vệ an toàn được kiểm tra khi mà chương trình thực hiện gọi phương thức được nạp vào trình điều khiển của common language runtime.
Security Note
Khi dùng SuppressUnmanagedCodeSecurityAttribute ta cần phải thận trọng hơn để đảm bảo rằng sẽ không có một lỗi an toàn nào trong chương trình của ta ( code ).

Ví dụ 3:

// SuppressSecurity.cs
using System;
using System.Security;
using System.Security.Permissions;
using System.Runtime.InteropServices;

class NativeMethods
{
/* Gọi đến unmanaged code. Thi hành phương thức đòi hỏiUnmanagedCode security permission. Nếu không có permission này thì sẽ đưa ra SecurityException:*/
/* Chú ý: SuppressUnmanagedCodeSecurityAttribute không thể kiểm tra UnmanagedCode permission lúc thi hành ! */
[SuppressUnmanagedCodeSecurityAttribute()]
[DllImport("msvcrt.dll")]
internal static extern int puts(string str);
[SuppressUnmanagedCodeSecurityAttribute()]
[DllImport("msvcrt.dll")]
internal static extern int _flushall();
}

class MainClass
{
/* security permission được gắn vào phương thức này sẽ hủy UnmanagedCode permission từ những thết lập permissions cho khoảng thời gian gọi đến phương thức này. Dù là phương thức CallUnmanagedCodeWithoutPermission được gọi từ một stack frame sẵn sàng gọi Assert cho unmanaged code, ta vẫn không thể gọi cái mã này. Bởi vì phương thức này đã được gắn Deny permission cho unmanaged code, permission đâ được ghi chồng. Tuy nhiên do ta dùng SuppressUnmanagedCodeSecurityAttribute ở đây, ta vẫn có thể gọi unmanaged methods thành công. Cái mã này sẽ dùng chế độ kiểm tra an toàn khác để đẩm bảo ta không mắc phải lỗ hổng an toàn bảo mật.*/
[SecurityPermission(SecurityAction.Deny, Flags =
SecurityPermissionFlag.UnmanagedCode)]
private static void CallUnmanagedCodeWithoutPermission()
{
try
{
/* The UnmanagedCode security check is disbled on the call below. Tuy nhiên, lời gọi unmanaged chỉ hiển thị UI. Security sẽ được đảm bảo vì chỉ cho phép gọi nếu có một UI permission.*/
UIPermission uiPermission =
new UIPermission(PermissionState.Unrestricted);
uiPermission.Demand();

Console.WriteLine("Attempting to call unmanaged code without UnmanagedCode permission.");
NativeMethods.puts("Hello World!");
NativeMethods._flushall();
Console.WriteLine("Called unmanaged code without UnmanagedCode permission.");
}
catch (SecurityException)
{
Console.WriteLine("Caught Security Exception attempting to call unmanaged code.");
}
}

/* security permission được gắn vào phương thức này sẽ thêm UnmanagedCode permission vào thiết lập của những permission hiện hành trong khi lời gọi đến phương thức này có hiện lực. Dù cho phương thức CallUnmanagedCodeWithPermission được gọi từ một stack frame chuẩn bị gọi Deny unmanaged code, nó sẽ không ngăn ta từ lời gọi. Ví phương thức này được gắn với Assert permission cho unmanaged code, permission bị ghi chồng. Bởi vì ta dùng SuppressUnmanagedCodeSecurityAttribute ở đây ta có thể gọi unmanaged methods thành công. SuppressUnmanagedCodeSecurityAttribute sẽ cho ta tiếp tục dù ta không có permission.*/
[SecurityPermission(SecurityAction.Assert, Flags =
SecurityPermissionFlag.UnmanagedCode)]
private static void CallUnmanagedCodeWithPermission()
{
try
{
Console.WriteLine("Attempting to call unmanaged code with permission.");
NativeMethods.puts("Hello World!");
NativeMethods._flushall();
Console.WriteLine("Called unmanaged code with permission.");
}
catch (SecurityException)
{
Console.WriteLine("Caught Security Exception attempting to call unmanaged code. Whoops!");
}
}

public static void Main()
{
SecurityPermission perm = new
SecurityPermission(SecurityPermissionFlag.Unmanage dCode);

/* Phương thức được gắn với security permission Deny cho unmanaged code, sẽ ghi đè Assert permission trong stack frame. Tuy nhiên vì ra dùng SuppressUnmanagedCodeSecurityAttribute, ta vẫn có thể gọi unmanaged methods thành công.*/
/*Đoạn mã ta dùng cho việc kiểm tra an toàn khác để đảm bảo ta không mắc phải lỗi bảo mật */
perm.Assert();
CallUnmanagedCodeWithoutPermission();

/* Phương thức được gắn với security permission Assert cho unmanaged code, sẽ ghi đè Deny permission trong stack frame. Vì ta dùng SuppressUnmanagedCodeSecurityAttribute, ta có thể gọi unmanaged methods thành công.*/
/* SuppressUnmanagedCodeSecurityAttribute sẽ cho phép ta kế tục (succeed) dù ta không có permission.*/
perm.Deny();
CallUnmanagedCodeWithPermission();
}
}

Output
Attempting to call unmanaged code without UnmanagedCode permission.
Hello World!
Called unmanaged code without UnmanagedCode permission.
Attempting to call unmanaged code with permission.
Hello World!
Called unmanaged code with permission.

==== Copy from HcE Gr0up=======



&ksvthdang(HCE)
Về Đầu Trang Go down
https://itcu.forumvi.com
 
Security permissions in .NET framework
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Ưu đãi 15% cho khóa học Zend Framework online

Permissions in this forum:Bạn không có quyền trả lời bài viết
»-(¯`v´¯)-»Diễn Đàn Trường Công Nghệ Thông Tin Thái Nguyên»-(¯`v´¯)-» :: Phận Làm Trai Gõ Phím Bình Thiên Hạ--Chí Anh Hùng Click Chuột Định Giang Sơn :: Bảo mật cho website-
Chuyển đến