安全性

      我们经常会看到一些具有典型特征的安全性攻击方面的新闻报道,这些报道声称黑客已能够窃取个人信息,或是敏感数据已遭到以外曝光。可悲的实际情况是,许多此类事件其实是很容易避免的。作为开发人员,我们需要的是以安全性意识去设计应用程序,以阻止这类问题。

一、认证与授权

      最基本的安全关注之一是,确保只有正确的用户才允许对系统进行访问。这就是认证(Authentication)与授权(Authorization)所起的作用。

      认证确保用户已提供了适当的访问系统所需的凭据。一旦用户登录(典型的是通过提供用户名和口令,或是某种其他令牌,如SSH密钥,或加密令牌),那么他们便是已认证的了。

      授权发生在认证之后,且包括对给定用户是否有权对系统做某事(如查看一个页面或编辑一条记录)的决策。当用户访问一个其他人不可用的资源时,必须得到明确的授权。

1.以AuthorizeAttribute限制访问

      ASP.NET MVC随带了一个叫做AuthorizeAttribute的过滤器注解属性,它为实现授权规则提供一种现成可用的简单方式。与认证方案协同使用,此注解属性可用来确保只有某些用户才能访问特定的控制器动作。

      默认情况下,用“Internet Application”项目模板创建的ASP.NET MVC新项目,会使用表单认证方案来启用认证,这种认证方案是在web.config文件的system.web/authentication部分中定义的:

      由于启用了表单认证,当用户试图访问需授权的资源时,他们会被重定向到loginUrl,以便输入用户名和口令。

      作为表单认证的一种替代办法,ASP.NET也支持Windows认证。Windows认证会尝试使用用户的Windows登录凭据对用户进行认证,因而它最适合于企业内部网应用程序(Intranet Application)。这时可将web.config中的<authentication mode="Forms">改成<authentication mode="Windows">来启用它。

      由于启用了认证,我们可以对控制器动作(或是对整个控制器)运用AuthorizeAttribute,以限制对它们的访问。如果用户未被允许对动作进行访问,AuthorizeAttribute将对浏览器传递一个“401Unauthorized(未授权)”的HTTP状态码,以指示拒绝该请求。使用表单认证的应用程序然后会将浏览器重定向到登录页面,只有用户已被认证才可以继续执行。

      AuthorizeAttribute最简单的使用只要求当前用户已被认证:

 

      为了对一个动作做进一步限制,我们可以指定AuthorizeAttribute所要求的用户或角色。

      此例只允许名为“admin”的用户访问这一动作。

      这种硬编码用户名的做法可能过于局限,更有意义的做法是指定角色。

    此例对Developers动作的访问将只允许admins或developers角色中的用户。

二、跨网站脚本攻击(XSS)

      跨网站脚本攻击(Cross-Site Scripting, CSS,XSS)是一项恶意用户操纵系统的技术,它使脆弱网站上呈现特殊的JavaScript(一种访问浏览器随后会执行的脚本)。

       按惯例,恶意脚本会向含有敏感数据的第三方网站发送一个请求。这便是跨网站部分。一个用户将一个脚本放在一个向另一个密谋网站发送秘密数据的网站。黑客的技巧是让该脚本在脆弱网站上运行。

1.动作中的XSS

       已知案例,可以执行一个本地的XSS模拟攻击。案例包含两个简单的ASP.NET MVC应用程序,其中一个是脆弱网站,它有一个简单的评论递交页面功能;另一个网站时攻击站,它简单地收集这些递交,于是我们便可以看到这种攻击能否运行。

 

posted @ 2014-12-11 17:59  liesl  阅读(448)  评论(0编辑  收藏  举报