NET安全体系结构.ppt
.NET 安全体系结构,姓名 软件开发工程师 微软,相关安全术语,验证(Authentication)Kerberos,NTLM,Basic,Digest,Passport 授权(Authorization)ACL,特权(privileges),权限(permission),角色(role)模拟(Impersonation),日程,.NET 安全体系结构代码访问安全角色安全检查ASP.NET 安全功能常见情形验证(Authentication)授权(Authorization)模拟(Impersonation)ASP.NET 代码访问安全,.NET 架构,编程模式 Common Language Runtime 运行和管理执行代码 JIT 及时编译器 Class Libraries Base Class Data Class XML Class ASP.NET classes Windows Forms,日程,.NET 安全体系结构代码访问安全角色安全检查ASP.NET 安全功能常见情形验证(Authentication)授权(Authorization)模拟(Impersonation)ASP.NET 代码访问安全,代码访问安全单一应用程序,代码访问安全组件化应用程序,代码访问安全,安全策略(Security Policy)代码证据(Code Evidence)权限(Permission),代码访问安全,控制代码访问资源的机制定义权限安全策略管理允许代码要求拥有权限授予代码权限允许代码请求其调用者具备特定权限动态限制代码安全(Stackwalking),代码访问安全,安全策略,代码,加载,代码证据,权限授予,授权规则,代码从哪里来?代码是谁签的名?其他.,代码访问安全安全策略,安全策略级别企业范围本机范围用户范围Application Domain 范围(不可配置)通过 caspol.exe 或 mscorcfg.msc 配置有效的安全策略是所有级别的交集,代码访问安全代码证据,预定义代码证据ZoneSiteUrlPublisherStrongName代码证据是可扩展的,代码访问安全安全权限,.NET 安全权限类定义CodeAccessPermissionDBDataPermissionPrintingPermissionDnsPermissionWebPermissionEnvironmentPermissionFileIOPermissionRegistryPermissionUIPermission自定义安全权限,代码访问安全安全权限,IPermission interfacenamespace System.Security interface IPermission bool IsSubsetOf(IPermisssion target);/比较 void Demand();/请求 void DemandImmediate();IPermission Copy();IPermission Intersect(IPermission target);IPermission Union(IPermission target);,代码访问安全安全权限,ISecurityEncodable interfacenamespace System.Security interface ISecurityEncodable void FromXml(SecurityElement elem);SecurityElement ToXml();,代码访问安全安全权限,IStackWalk interfacenamespace System.Security public interface IStackWalk void Assert();void Demand();void DemandImmediate();void Deny();void PermitOnly();,代码访问安全安全权限,代码访问安全,程序域(App Domain),已信任宿主代码,代码访问安全,代码实例静态安全权限请求using System;using System.Security.Permissions;assembly:PermissionSetAttribute(SecurityAction.RequestMinimum,File=“min_perm.xml”)assembly:PermissionSetAttribute(SecurityAction.RequestOptional,File=“opt_perm.xml”)class ep static void Main()Console.WriteLine(“Hello World”);,代码访问安全,代码实例动态安全权限请求using System.Security.Permissions;class Test public void readSomeFile()/描述你的请求IPermission request=new FileIOPermission(FileIOPermissionAccess.Read,”c:foobarquux.txt”);/请求request.Demand();/如果失败,引发 SecurityException/请求成功,日程,.NET 安全体系结构代码访问安全角色安全检查ASP.NET 安全功能常见情形验证(Authentication)授权(Authorization)模拟(Impersonation)ASP.NET 代码访问安全,角色安全检查,基于角色的预定义类GenericPrincipalGenericIdentityWindowsPrincipalWindowsIdentity自定义类PrincipalPermission,角色安全检查,IPrincipal interfacenamespace System.Security.Principal public interface IPrincipal IIdentity Identity get;bool IsInRole(String role);IIdentity interfacenamespace System.Security.Principal public interface IIdentity String AuthenticationType get;bool IsAuthenticated get;String Name get;,角色安全检查,静态安全检查 PrincipalPermissionAttribute(SecurityAction.Demand,Name=“MyUser”,Role=“User”)public static void PrivateInfo()/打印保密数据Console.WriteLine(“nnYou have access to the private data!”);,角色安全检查,动态安全检查String id1=Bob;String role1=Manager;PrincipalPermission PrincipalPerm1=new PrincipalPermission(id1,role1);String id2=Louise;String role2=Supervisor;PrincipalPermission PrincipalPerm2=new PrincipalPermission(id2,role2);(PrincipalPerm1.Union(PrincipalPerm2).Demand();,日程,.NET 安全体系结构代码访问安全角色安全检查ASP.NET 安全功能常见情形验证(Authentication)授权(Authorization)模拟(Impersonation)ASP.NET 代码访问安全,ASP.NET 体系结构,日程,.NET 安全体系结构代码访问安全角色安全检查ASP.NET 安全功能常见情形验证(Authentication)授权(Authorization)模拟(Impersonation)ASP.NET 代码访问安全,常见情形当前面临的问题,ASP 验证Basic,Windows缺乏一个简单的应用程序接口来决定用户和组信息窗体式验证没有直接支持,须通过复杂编程实现,或购买另一种支持表格化验证的产品不同于 Basic 或 Windows 用户验证的编程模型,常见情形当前面临的问题,ASP 授权没有一个给代码授权的接口ASP 沙箱(Sandboxing)不能把一个 ASP 应用程序限制在有限的运行环境中运行ISPs 很难在不危及其他客户代码可及性和安全性的情况下允许客户某些特权,常见情形ASP.NET 的解决办法,支持多种验证模式不论什么样的验证方式,简单的应用程序接口决定用户和角色授权统一的代码授权接口模拟以一个固定用户的名义运行,或者模拟登录用户通过一个简单的文本配置文件设定ASP.NET 代码安全访问基于信任级别来限制 web 应用程序的运行建立自己的信任级别,日程,.NET 安全体系结构代码访问安全角色安全检查ASP.NET 安全功能常见情形验证(Authentication)授权(Authorization)模拟(Impersonation)ASP.NET 代码访问安全,验证(Authentication)验证方式,ASP.NET 是一个 ISAPI 扩展模块Windows 验证(通过 Internet Information Server)Basic,Digest,NTLM,Kerberos,Internet Information Server Certificate窗体式验证应用程序的用户身份验证Microsoft Passport 验证自定义验证,验证(Authentication)窗体式用户验证,容易实现ASP.NET 提供重定向自定义登录用户界面(无需弹出式对话窗)自定义用户身份验证自定义应用程序角色,窗体式用户验证工作流程,Web 流览器,IIS/ASP.NET,验证(Authentication)窗体式用户验证,登录网页用标准的 HTML 表格提示用户输入姓名和口令能够用多种机制来验证用户数据库查找web.config 文件中的静态姓名和口令Active Directory其他,窗体式用户验证程序接口,FormsAuthentication ClassRedirectFromLoginPage用户验证后,重定向到原来请求的 URLHashPasswordForStoringInConfigFile密码加密,方便存在配置文件中GetAuthCookie获得用户验证 cookieSetAuthCookie将用户验证 cookie 加入到回复中,日程,.NET 安全体系结构代码访问安全角色安全检查ASP.NET 安全功能常见情形验证(Authentication)授权(Authorization)模拟(Impersonation)ASP.NET 代码访问安全,授权(Authorization)基于用户,Web.config(ASP.NET)Syntax:,授权(Authorization)基于角色,Web.config(ASP.NET),授权(Authorization)分配角色,Windows 验证Windows 组自动变成 ASP.NET 角色窗体式验证基于 web.config 文件的静态分配用编程的方法动态分配,表格验证和授权 演示#1,日程,.NET 安全体系结构代码访问安全角色安全检查ASP.NET 安全功能常见情形验证(Authentication)授权(Authorization)模拟(Impersonation)ASP.NET 代码访问安全,模拟(Impersonation)Web 站点的身份(Identity),NT AUTHORITYSYSTEMIUSR_MACHINENAME基于 Web.Config 文件固定的身份 用户的身份,Windows 验证和模拟 演示#2,日程,.NET 安全体系结构代码访问安全角色安全检查ASP.NET 安全功能常见情形验证(Authentication)授权(Authorization)模拟(Impersonation)ASP.NET 代码访问安全,ASP.NET 代码访问安全信任级别,单个 web 应用程序能够被分配不同程度的信任级别信任级别决定访问权限例如Full trust:应用程序能够使用所有资源(仅受限于操作系统)Low trust:有限的资源访问,应用程序目录中的只读文件访问,有限的网络连接,等等,ASP.NET 代码访问安全信任级别,4 预定义设置Full:无代码安全限制High:不允许 native 代码,可读/写应用程序 目录,可连接 SQL ServerLow:可读应用程序目录,DNSNone:可执行代码,IsolatedStorage信任级别能够被自定义或扩展,ASP.NET 代码访问安全单一的安全机制,相同的存取控制被用在整个.NET 体系中沙箱网站下载代码用户可执行文件,ASP.NET 代码访问安全 演示#3,总结,.NET 基本安全机制多种用户验证机制基于角色的授权模拟(默认,静态,动态)用户和管理员决定代码能够做什么不再需问“我真的信任你吗?”Sandbox 网站,下载代码,可执行文件,或者用户,.NET 架构不能做的,取代应用软件设计的安全考虑 处理非正常的权限用法 防止所有可能发生的攻击 网络不安全 很弱的用户帐号原则 不及时更新软件 有攻击漏洞的服务 安全处理非管理代码,更多信息可在下列地方找到:,MSDN 网站Microsoft 正式课程(MOC)MOC 2350Securing and Deploying Microsoft.NET AssembliesMOC 2145Programming the Microsoft.NET Framework with Visual Basic.NETMOC 2349Programming the Microsoft.NET Framework with C#,MSDN开发员最好的和必备的资源,站在微软技术最前沿!,为开发者创建的网络提供一年12期的光盘资料分五个级别开发库最新的开发文档,示例代码操作系统开发库+全部微软操作系统+SDK+DDK专业版操作系统+VS.net 专业版企业版专业版+部分企业服务器产品宇宙版企业版+其他所有微软商业产品目的:为开发人员提供最先进的技术资料,产品,请提问,