Các giải pháp lập trình CSharp- P64 ppsx

10 198 0
Các giải pháp lập trình CSharp- P64 ppsx

Đang tải... (xem toàn văn)

Thông tin tài liệu

521 Chương 13: Bảo mật nắm được các mặt hạn chế của một thư viện mà bạn muốn gọi từ mã lệnh của bạn.   Sử dụng công cụ Permissions View ( Permview.exe —được cấp cùng với . NET Framework SDK ). l%2&.6.e$8&*N&IN9''; .Sgcode access permission requirementsh(.&'.&*)=i@*' l'G(.&'=$';Q:) &*lD8&*N&I(.&'*&VK9'4O)   '    =    .      &i  *  I  g@  )3  I  *   System.Security.SecurityException h P4Permview.exe.MIM.49F8&*F;(. '>N9'&gdeclarative permission requesth$*&>.(.&'E &t.'>NDgminimum requesth8'>Ne'0goptional requesth8'>N *Qgrefusal requesthu2)8)<'&.ND8.'>Ne' 08.'>N*Q\ using System.Net; using System.Security.Permissions; // Yêu cầu quyền tối thiểu: SocketPermission. [assembly:SocketPermission(SecurityAction.RequestMinimum, Unrestricted = true)] // Yêu cầu quyền tùy chọn: SecurityPermission. [assembly:SecurityPermission(SecurityAction.RequestOptional, Unrestricted = true)] // Yêu cầu loại trừ quyền: FileIOPermission. [assembly:SecurityPermission(SecurityAction.RequestRefuse, Unrestricted = true)] public class PermissionViewExample { public static void Main() { // Làm gì đó } } 7=  permview PermissionViewExample.exe  @  I;"!)e 4.'<&*3F0I;;i'>N9'$ *&C(.&'"#&'>N9'ED8e'08*QE $ > )  .> >   $ I   C  )* XML . D$ System.Security.PermissionSet  522 Chương 13: Bảo mật Microsoft (R) .NET Framework Permission Request Viewer. Version 1.1.4322.510 Copyright (C) Microsoft Corporation 1998-2002. All rights reserved. minimal permission set: <PermissionSet class="System.Security.PermissionSet" version="1"> <IPermission class="System.Net.SocketPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true"/> </PermissionSet> optional permission set: <PermissionSet class="System.Security.PermissionSet" version="1"> <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true"/> </PermissionSet> refused permission set: <PermissionSet class="System.Security.PermissionSet" version="1"> <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true"/> </PermissionSet>  Bằng cách chỉ định đối số /decl khi chạy tiện ích Permview.exe , bạn có thể xem tất cả các lệnh bảo mật khai báo ( declarative security statement ) nằm trong một assembly. Việc này cho thấy rõ những gì assembly thực hiện bên trong và cho phép bạn cấu hình chính sách bảo mật một cách phù hợp. Tuy nhiên, Permview.exe không hiển thị các thao tác bảo mật bắt buộc ( imperative security operation ) nằm trong một assembly. Hiện không có cách nào để trích và tổng kết các thao tác bảo mật bắt buộc được thực thi bên trong một assembly. 7. 7. Xác đ nh mã l nh có quy n nào đó lúc th c thi hay khôngị ệ ề ự Xác đ nh mã l nh có quy n nào đó lúc th c thi hay khôngị ệ ề ự   Bạn cần xác định assembly của bạn có một quyền cụ thể nào đó lúc thực thi hay không. 523 Chng 13: Bo mt To v cu hỡnh quyn m bn mun kim tra ri truyn nú cho phng thc tnh IsGranted ca lp System.Security.SecurityManager . |O)'>N9'D8&*Făàãàộ&=(.&'6 9'S$JiTI.S&**'8&*F/5FF 9'DS$'>N7'>8&*F.D=.:vF2 +M-:)F:vFJ&=(.&' &*9'Ơẫ$PI6'$2:F.N&5'> N9'e'08X&*iq.69' S&*F ỉ)I2&.6G8ạƠễƠĐÔĐÊầ-đố-ỉƠ Ơ Ơ ƠễêẻƠg.Z^`S%&'I'>N9'e'0h uD'>N9'e'0&=4Fv& (.&'5FSK9'L*FO).Ơêã$z&z &* . >. ;4 0 Ô )3 I * System.Security.SecurityException 7'>8@9M;i;(.&*F 9'NI'4|F8&*FéèÔố- ã.S 0Ơà>$z&z.@<' )=>*& .6l*.S)<'%&'O)M: IsGranted ;i;(. (.&'*F9'.C:\Data'4L*F*. 0 I.#&*N.9'8@9MIO)i6 BI6. %&IFX )ef('4 // nh ngha mt bin lun lý cho bit assembly cú quyn // truy xut ghi i vi th mc C:\Data hay khụng. bool canWrite = false; // To v cu hỡnh mt i tng FileIOPermission mụ t quyn // truy xut ghi i vi th mc C:\Data. System.Security.Permissions.FileIOPermission fileIOPerm = new System.Security.Permissions.FileIOPermission( System.Security.Permissions.FileIOPermissionAccess.Write, @"C:\Data"); // Kim tra assembly hin ti cú quyn ó c ch nh hay khụng. canWrite = System.Security.SecurityManager.IsGranted(fileIOPerm); 8. 8. H n ch ai ú th a k cỏc l p c a b n H n ch ai ú th a k cỏc l p c a b n v chộp ố cỏc thnh viờn l p v chộp ố cỏc thnh viờn l p Bn cn kim soỏt nhng ai cú th tha k cỏc lp ca bn thụng qua s tha k ( inheritance ) v mt lp dn xut cú th chộp ố nhng thnh viờn no. 524 Chương 13: Bảo mật   Sử dụng các lệnh bảo mật khai báo ( declarative security statement ) để áp dụng thành viên SecurityAction.InheritanceDemand vào phần khai báo của các lớp và các thành viên bạn cần bảo vệ. P.)f( sealed 8 public 8 private 8 virtual X&*.v 'QI&*X1>F7'>8 .)f('4*84Fv00*K.S FQI.!X1>Fu2)8&*.DJK .S)4''&*I%.FQI908 !JK.S$*Q.'&%.FQIM: FL5) InheritanceDemand &'>8&*FJ i9'gG=h..F%.FQI&*!X 1>FH589'.9'(.&' .'$&F "!)e&*F'>N&…9''69' InheritanceDemand 8 4 '>N9'i)gidentity permissionhY'i).4 ::gevidenceh).(.&' &=HI.(.&' ::FG*8&=@=(.&''9'i)e $Y' i  ) X  &* O  )   & .6  &/ &    & gimperativedeclarativesecuritystatementh =I9'Ii&.6gsecurity decisionhv:>i).Sgcode identityh.4N=ID $::LZ^zZ>9'i)$*.#:: g::>4> System.Security.Policy 89'i )>4> System.Security.Permissions h Bảng 13.1 Các lớp chứng cứ và các quyền định danh Lớp chứng cứ Quyền định danh ApplicationDirectory w4 Hash w4 Publisher PublisherIdentityPermission Site SiteIdentityPermission StrongName StrongNameIdentityPermission Url UrlIdentityPermission Zone ZoneIdentityPermission  Bộ thực thi gán các quyền định danh cho một assembly dựa trên chứng cứ do assembly này đưa ra. Bạn không thể gán thêm quyền định danh cho một assembly thông qua việc cấu hình chính sách bảo mật. L*O)G&.6&gdeclarativesecurity syntaxh=. InheritanceDemand 8>&*O)&!2gattribute counterparth 9'.&*.D'>N79'F.&!2* 525 Chương 13: Bảo mật   &  .6    &E&  t.  InheritanceDemand   u2  )8  &    !  2   PublisherIdentityPermission    PublisherIdentityPermissionAttribute 8 &! 2 StrongNameIdentityPermission  StrongNameIdentityPermissionAttribute E 9'&!2Ge(9'!>> e4> l.K.SFQI&*8S') InheritanceDemand &l*.S)<'%&'.$&&5 InheritanceDemand  7(F8JK&>(.&'$B&C&(z(f( g5. f( pubcert.cerh%.FQI  InheritanceDemandExample H)f( pubcert.cer $0G&>)i84:=NI$/ (.&' [PublisherIdentityPermission(SecurityAction.InheritanceDemand, CertFile = @"I:\CSharp\Chuong13\pubcert.cer")] public class InheritanceDemandExample { § } l.K.SFX1>F8&*S') InheritanceDemand &>{X*.S)<'8JK$ 69' FullTrust %.FX1M: SomeProtectedMethod  [PermissionSet(SecurityAction.InheritanceDemand, Name="FullTrust")] public void SomeProtectedMethod () { § } 9. 9. Ki m tra ch ng c c a m t assemblyể ứ ứ ủ ộ Ki m tra ch ng c c a m t assemblyể ứ ứ ủ ộ   Bạn cần kiểm tra chứng cứ mà bộ thực thi đã gán cho một assembly.   Thu lấy đối tượng System.Reflection.Assembly mô tả assembly mà bạn quan tâm. Lấy tập hợp System.Security.Policy.Evidence từ thuộc tính Evidence của đối tượng Assembly , rồi truy xuất các đối tượng chứng cứ bên trong bằng phương thức GetEnumerator , GetHostEnumerator , hay GetAssemblyEnumerator của lớp Evidence . y Evidence .4.6$D$::72Jz0 Evidence   Assembly .D$6$ Evidence :D$::.& =S(.&'(.&''$* 768 Evidence :6$8.4::\:: ::(.&'P:: &t.D$::$(.&' &C&='.SS*(.&'g.S'6'hP:: (.&' .4D$::e'&I$G(.&'G*)=y Evidence =&M:<'>D$::&>\ • GetEnumerator 526 Chương 13: Bảo mật • GetHostEnumerator • GetAssemblyEnumerator RM: GetEnumerator . System.Collections.IEnumerator )e> D$::&>6$ Evidence RM: GetHostEnumerator  GetAssemblyEnumerator . IEnumerator >JD$::Q 6$M: u2 )  )<'%&'i ::  ::(.&'  . (.&'  PG  B  58          :  :  x    X  1  M  : Object.ToString &)r*D$::"!)eF>9 4G2)'?i::..(.&'@F$*Q &>  M %  &* W.(  g Microsoft ASP.NET ' Microsoft Internet Explorer runtime hosthF=B>.:: F*.(.&' using System; using System.Reflection; using System.Collections; using System.Security.Policy; public class ViewEvidenceExample { public static void Main(string[] args) { // Nạp assembly đã được chỉ định. Assembly a = Assembly.LoadFrom(args[0]); // Thu lấy tập hợp Evidence từ assembly đã được nạp. Evidence e = a.Evidence; // Hiển thị chứng cứ host. IEnumerator x = e.GetHostEnumerator(); Console.WriteLine("HOST EVIDENCE COLLECTION:"); while(x.MoveNext()) { Console.WriteLine(x.Current.ToString()); } // Hiển thị chứng cứ assembly. x = e.GetAssemblyEnumerator(); Console.WriteLine("ASSEMBLY EVIDENCE COLLECTION:"); while(x.MoveNext()) { 527 Chương 13: Bảo mật Console.WriteLine(x.Current.ToString()); } } } 7::x)NET Framework&&I8&*4's iG&=S*tG(.&'H8&* 4>.'*&V(.G>.6$&5 IEnumerator 8I 48M: MoveNext @X.* System.InvalidOperationException  10. 10. X lý ch ng c khi n p m t assembly ử ứ ứ ạ ộ X lý ch ng c khi n p m t assembly ử ứ ứ ạ ộ   Bạn cần xử lý chứng cứ khi nạp một assembly để tác động đến các quyền mà bộ thực thi cấp cho assembly.   Tạo các đối tượng chứng cứ mà bạn muốn gán cho assembly, sau đó thêm chúng vào một thể hiện của lớp System.Security.Policy.Evidence , rồi truyền tập hợp Evidence cho phương thức dùng để nạp assembly. P::g$I.K&C.(.&'hiqi)gidentityh(.&' ;i&=9'(.&'L*(.&'gAssemblyLoaderh i.2;i::%.(.&'8. 6'gASP.NET'Internet Explorer runtime hosth?F: :.(.&'"S&*F::*.(.&'I.S 'FNO ControlEvidence  SecurityPermission   Nếu bạn nạp một assembly vào một miền ứng dụng hai lần nhưng gán chứng cứ khác vào assembly này mỗi lần như thế, bộ thực thi sẽ ném ngoại lệ System.IO.FileLoadException . PFM:=::*.(.&'"!.. M:' F6.6$ Evidence .DDE Evidence .&:D$::L*!QD$::.&* .D (.&' .6 $  Evidence    'F  M:* (.&'HI&*::.;::$&C&*(.&'8 ::.@'I::?LZ^z]>M: G=I'I*.(.&'"#M:.' >&*t6.6$ Evidence  Bảng 13.2 Các lớp và các phương thức của chúng cho phép bạn gán chứng cứ cho một assembly Lớp/Phương thức Mô tả y System.Activator PM:'CI.:)  CreateInstance CreateInstanceFrom 7*  .      .  :  )      Q (.&'$Ji 528 Chương 13: Bảo mật y System.AppDomain PM:'CI.:) $.4&CD$ AppDomain gM:$ 0>Fh CreateInstance CreateInstanceAndUnwrap CreateInstanceFrom CreateInstanceFromAndUnwrap 7*.Q(.&'$Ji DefineDynamicAssembly 7*  .  D  $  System.Reflection.Emit. AssemblyBuilder 8&*FO)F* .(.&'& ExecuteAssembly H*=.(.&'F.6S$ iqgM: Main h Load H*(.&'$Ji y System.Reflection.Assembly PM:'CI.:)  Load LoadFile LoadFrom LoadWithPartialName H*(.&'$Ji l*.S)<'%&'O)M: Assembly.Load *.(.&' .:)70 Load 8*.S'*.6$ Evidence  O)M: AddHost F>.D$:: Site  Zone g >4> System.Security.Policy h // Tạo các đối tượng chứng cứ Site và Zone mới. System.Security.Policy.Site siteEvidence = new System.Security.Policy.Site("www.microsoft.com"); System.Security.Policy.Zone zoneEvidence = new System.Security.Policy.Zone(System.Security.SecurityZone.Trusted); // Tạo một tập hợp Evidence mới. System.Security.Policy.Evidence evidence = new System.Security.Policy.Evidence(); // Thêm các đối tượng chứng cứ Site và Zone vào tập hợp Evidence // bằng phương thức AddHost. 529 Chương 13: Bảo mật evidence.AddHost(siteEvidence); evidence.AddHost(zoneEvidence); // Nạp assembly có tên là "SomeAssembly" và gán các đối tượng Site và // Zone cho nó. Các đối tượng này sẽ chép đè các đối tượng Site và Zone // do bộ nạp assembly gán. System.Reflection.Assembly assembly = System.Reflection.Assembly.Load("SomeAssembly", evidence); 11. 11. X lý b o m t b th c thi b ng ch ng c c a mi n ng d ng ử ả ậ ộ ự ằ ứ ứ ủ ề ứ ụ X lý b o m t b th c thi b ng ch ng c c a mi n ng d ng ử ả ậ ộ ự ằ ứ ứ ủ ề ứ ụ   Bạn cần buộc một giới hạn trên ( upper limit ) lên các quyền đang có hiệu lực với tất cả các assembly được nạp vào một miền ứng dụng cụ thể.   Cấu hình chính sách bảo mật để cấp các quyền phù hợp dựa trên chứng cứ mà bạn dự định gán cho miền ứng dụng. Khi tạo miền ứng dụng bằng phương thức tĩnh CreateDomain của lớp System.AppDomain , bạn hãy cung cấp một tập hợp System.Security.Policy.Evidence chứa các đối tượng chứng cứ của miền ứng dụng. Sau đó, nạp các assembly mà bạn muốn giới hạn các quyền của chúng bên trong miền ứng dụng này. lG&=9'(.&')=>::.(.&''G *8&=?9'.:))=>::GL =4::.:)(F(.&' %4F%::F=7'F8.S*.:) ::N  Bộ thực thi chỉ sử dụng các mức chính sách công ty ( enterprise ), máy ( machine ), và người dùng ( user ) để tính các quyền của một miền ứng dụng; các chính sách bảo mật của các miền ứng dụng hiện có không giữ vai trò gì cả. Mục 13.12 sẽ thảo luận chính sách bảo mật miền ứng dụng. P.:)4F::DDMI&.6';.S &=P.:)$::F.z()=>2 &.6F.k90<'>N&.6CAS w9%=:);'>9.&>.:)8&=* 'I>w.'>N&.6<'>.Š8&' I.:)$;OBD&E&=z (I&&.F:9'$'>Nl'q 9'..:)CI.S$*.: )¢¥è’‘›§8.:)I6.*>>v.S $*F "2)90O)::.:)Microsoft Internet Explorer Internet Explorer*..:).#(.F)Š).$z 9zBQF7.$)Š)Q.(E? (.&'.G*E*'e.:)wInternet Explorer*. 530 Chương 13: Bảo mật :).(8F:: System.Security.Policy.Site .:) 'l'&.58I.$)Š)*.(.&'g'Q q&h8(.&''&i&&C9'$. :))=>:: Site 2&.6  Trừ khi bạn gán chứng cứ cho miền ứng dụng một cách tường minh khi tạo nó, miền ứng dụng này không ảnh hưởng gì đến các yêu cầu bảo mật ( security demand ). l::..:)8&*S'*.6$ Evidence >.D $::NIF&5M: Evidence.AddHost w*.:) .8&*'6$ Evidence .>&*tM: q  CreateDomain ‘ ꣓‘›œÓ–¥‘²¥Ì–‘˜•µ•‘’¥Å–¥‘À“’¥‘›¥©È–˜‘¹ë‘’±ª‘¨¿‘›¥è’‘›¥•‘ÀۑГ’‘¯¶–¥ z(.:) ‚))<'%&'::..:)7F8:) *.SQ.&(..:)&(’š‘›¥³L5 .:):: System.Security.Policy.Publisher .4&(N ..82)'*Iv.S$*.:)|O) 2&.68&*F.S&(.69'=*M;: .:6'&*!&( using System; using System.Security.Policy; using System.Security.Cryptography.X509Certificates; public class AppDomainEvidenceExample { public static void Main() { // Tạo một miền ứng dụng mới cho mỗi publisher mà ứng dụng này // sẽ nạp mã lệnh của nó. Truyền cho phương thức CreateAppDomain // tên công ty, và tên của file chứa chứng chỉ X.509v3 // của công ty này. AppDomain appDom1 = CreateAppDomain("Litware", "litware.cer"); AppDomain appDom2 = CreateAppDomain("Fabrikam", "fabrikam.cer"); // Nạp mã lệnh từ các publisher vào miền ứng dụng phù hợp // để thực thi. § } . một cách phù hợp. Tuy nhiên, Permview.exe không hiển thị các thao tác bảo mật bắt buộc ( imperative security operation ) nằm trong một assembly. Hiện không có cách nào để trích và tổng kết các. thực thi chỉ sử dụng các mức chính sách công ty ( enterprise ), máy ( machine ), và người dùng ( user ) để tính các quyền của một miền ứng dụng; các chính sách bảo mật của các miền ứng dụng hiện. mật evidence.AddHost(siteEvidence); evidence.AddHost(zoneEvidence); // Nạp assembly có tên là "SomeAssembly" và gán các đối tượng Site và // Zone cho nó. Các đối tượng này sẽ chép đè các đối tượng Site và Zone // do bộ nạp assembly gán. System.Reflection.Assembly

Ngày đăng: 08/07/2014, 17:20

Từ khóa liên quan

Mục lục

  • LỜI NÓI ĐẦU

  • CẤU TRÚC CỦA SÁCH

  • QUY ƯỚC

  • YÊU CẦU VỀ HỆ THỐNG

  • CÁCH SỬ DỤNG ĐĨA CD

  • MỤC LỤC

  • Chương 1:PHÁT TRIỂN ỨNG DỤNG

    • 1. Tạo ứng dụng Console

    • 2. Tạo ứng dụng dựa-trên-Windows

    • 3. Tạo và sử dụng module

    • 4. Tạo và sử dụng thư viện

    • 5. Truy xuất các đối số dòng lệnh

    • 6. Chọn biên dịch một khối mã vào file thực thi

    • 8. Tạo và quản lý cặp khóa tên mạnh

    • 9. Tạo tên mạnh cho assembly

    • 10. Xác minh một assembly tên mạnh không bị sửa đổi

    • 11. Hoãn việc ký assembly

    • 12. Ký assembly với chữ ký số Authenticode

    • 13. Tạo và thiết lập tin tưởng một SPC thử nghiệm

    • 14. Quản lý Global Assembly Cache

    • 15. Ngăn người khác dịch ngược mã nguồn của bạn

Tài liệu cùng người dùng

Tài liệu liên quan