网络安全

位置:IT落伍者 >> 网络安全 >> 浏览文章

开发安全的ASP.NET应用程序


发布日期:2023年11月01日
 
开发安全的ASP.NET应用程序

Web应用程序会遭到几种类型的攻击其破坏效果会因程序本身的不同而不同因此安全性是与程序的用法和用户与其功能交互的方式密切相关的那么应该如何来设计和编码ASPNET应用程序呢?

从应用程序的角度来看安全性通常指对用户的鑒别以及对系统资源授予访问权限ASPNET提供了许多鑒别和授权机制它们与IISNET Framework以及操作系统底层的安全服务是相连的

当一个客户端发出一个Web请求时将发生下列顺序的鑒别和授权事件

IIS鑒别

ASPNET鑒别

ASPNET授权

鑒别用户

如果页面是可以被察看的而请求来自一个非受限的IP地址IIS将通过预定义的鑒别机制来对调用请求进行鑒别首先IIS确保请求来自一个可信任的IP地址如果不是请求将以HTTP错误而被拒绝第二个措施是检查被请求的资源是否可以被读或被浏览如果不是请求将以HTTP错误而被拒绝然后IIS尝试使用IntergratedDigest或Basic方法来鑒别这个调用如果用到了Windows的Intergrated方法Kerberos或NTLM将被使用如果请求通过了这一关就轮到ASPNET出场了

ASPNET支持三种类型的鑒别方法WindowsForms和Passport如果ASPNET被配置为Windows鑒别则它不需要其它的步骤而是直接承认任何从IIS传来的安全标记如果ASPNET被配置为Forms鑒别将使用一个HTML表单提示用户输入信任资料通过用户ID和密码在存储的合法用户列表中查寻应用程序可以任意选择最合适的存储机制包括SQL Server数据库或Active Directory服务最后如果ASPNET被配置为Passport鑒别用户将被转入一个Passport Web站点并由Passprot服务来鑒别

第四中类型的鑒别是None这意味着ASPNET并不执行自己的鑒别而是完全依靠已经由IIS执行的鑒别在这种情况下匿名用户可以连接进来而访问资源使用的是ASPNET账户将ASPNET鑒别模式设定为None并不妨碍程序实现自己的鑒别层

在nfig文件中通过使用<authentication>区段来选择ASPNET的鑒别机制默认的鑒别模式是Windows

授权

当然鑒别只是意味着用户被确认为是其本身下一步是确认用户拥有足够的权限来访问请求的资源

在鑒别完之后ASPNET将校验调用是否被授权用以访问请求的资源来执行操作一对HTTP模块提供了这项服务UrlAuthorizationModule和FileAuthorizationModule前者确保nfig文件中<authorization>区段中的授权规则完全实现后者在使用Windows鑒别时来检查调用是否有足够的访问许可来访问请求的资源在这种情况下通过比较访问资源的控制列表(ACL)调用的标记来执行校验在处理过程中也可以用NET roles来改变调用者的权限以便使用某个资源

授权规则由两部分独立的信息组成它们定义了哪些是允许的那些事禁止的在<authorization>区段内标记<allow>定义了允许的用户任务和操作相反在<deny>标记中包含了不被允许的用户任务和操作

你也许注意到鑒别模式只能在nfig文件或在程序层的nfig文件中设置子目录继承了程序的鑒别模式但是授权设置可以在每个子目录的nfig文件中设置换句话说授权比鑒别支持更细

基于角色的安全

如果你需要鑒别用户你同样需要为他们建立个性化的页面这里有两大的选择一是实现一个个人资料系统为每个用户存储配置信息二是定义一些角色把用户映射到这些角色上

在第一种情况下要维护个人资料记录可能需要存储与用户界面有关的设置以及打开或关闭的功能在设计页面时访问这些个人资料记录来为当前用户生成相应的页面

如果你不必维护每个用户的信息而只是要将用户分类并维护基于每一类的信息那基于角色的方法就显得更好一个角色是一个名称——一个简短的描述性字符串——它为属于这个角色的每个用户定义了一组功能用户界面元素以及权限

定义角色需要两个步骤首先定义所有可能的角色为每个用户分配其中的一个或多个这通常在数据库层完成典型的你在存储用户名字和密码的数据库中加入一列来存储每个用户的角色

鑒别一个用户时其身份并没有和任何角色信息关联但是有一个功能用来来检查某一个身份是否属于特定的已定义角色可以使用PageUser对象的IsInRole功能来检验一个用户的角色 if(UserIsInRole(Boss))

ResponseWrite(The user is the boss

定义角色的第二步是将每个已鑒别的用户与角色相关联要这样做你必须创建一个新的主体对象其类型可以是普通的或与授权种类相同通常在Globalasax文件中处理AuthenticateRequest事件时完成 //角色是根据当前用户从数据库中读出的字符串

ContextUser=new GenericPrincipal(UserIdentityrole)

这时鑒别模块能够通过本地nfig文件的<authorization>区段来检验用户的角色例如一个其nfig文件如下所示的文件夹里的页面只能被属于Boss角色的用户访问 <authorization>

<allow roles=Boss/>

<deny users=*/>

</authorization>

鑒别模块使用IsInRole函数通过角色来授权

保护你的应用程序

保护一个Web应用程序就必须保护Web服务器不受各种攻击但是它还需要实现有效的办法来阻止对页面的非法访问ASPNET提供了一些内建的代码来对用户和操作来进行鑒别和授权

上一篇:网络硬盘之文件夹实现

下一篇:ASP安全设置:禁止从外部提交数据