明霞山资源网 Design By www.htccd.com

本文实例讲述了asp.net MVC利用ActionFilterAttribute过滤关键字的方法。分享给大家供大家参考,具体如下:

在开发过程中,有时候会对用户输入进行过滤,以便保证平台的安全性。屏蔽的方法有很多种,但是今天我说的这种主要是利用MVC中的ActionFilterAttribute属性来实现。由于MVC天然支持AOP,所以我们这种过滤方式正好利用了MVC的这种特性。

下面请看步骤:

首先,当用户输入自己的名称的时候,带有类似<BR>的内容的时候,由于MVC默认是需要验证内容的,所以,会抛出一张黄页错误,提示用户:从客户端检测到潜在风险的Request值。这种页面是极为不友好的,同时也是我们作为开发最不想见到的页面,屏蔽这个错误很简单,就是在响应的页面ActionResult上面加上[ValidateInput(false)]的特性,这样当用户提交的时候,页面将不会再次对输入内容做检测。

如果容忍这样的行为,将会对系统的安全性造成威胁,所以最好的解决方法就是讲其中类似 <>等进行转义。

下面我们就来利用ActionFilterAttribute构造自己的转义过滤类:

using System.Web.Mvc;
using TinyFrame.Plugin.StrongTyped.Models;

namespace TinyFrame.Plugin.StrongTyped
{
  public class FilterCharsAttribute : ActionFilterAttribute
  {
    protected string parameterName = "t";
    protected TestModel model;
    
 public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
      base.OnActionExecuting(filterContext);
      
   //No Parameters, will return directly.
      if(!filterContext.ActionParameters.ContainsKey(parameterName))
        return;
      
   var t = filterContext.ActionParameters[parameterName] as TestModel;
      
   //No Entity data, will return directly
      if (t == null)
        return;
      
   //Replace chars that should be filtered
      if (!string.IsNullOrEmpty(t.TName))
        t.TName = t.TName.Replace("<", "&lt").Replace(">", "&gt");
      if (!string.IsNullOrEmpty(t.TSite))
        t.TSite = t.TSite.Replace("<", "&lt").Replace(">", "&gt");
    }
  }
}

第8行,代表我们的用户输入的实体类参数,具体的Controller代码如下:

public ActionResult Index(TestModel t)
{
     ViewData["ConvertedModel"] = t;
     return View();
}

第11行,通过重载OnActionExecuting方法,我们可以定义自己的Filter。

第19行,将获取的Input结果转换成entity。

第27,29行,将潜在的危险字符进行转义。

这样书写完毕之后,我们就打造了一个可以过滤掉关键字的Filter了。如果想要做的通用的话,需要对输入的filterContext.ActionParameters进行遍历,并通过反射构建实例,再通过反射字段值,实现通用的关键字过滤。这里我只提供思路,具体的做法就看自己了。

然后将这个方法加入到Controller中需要检测的页面的头部,即可:

[ValidateInput(false)]
[FilterChars]
public ActionResult Index(TestModel t)
{
   ViewData["ConvertedModel"] = t;
   return View();
}

这样,我们就完成了对输入数据的过滤操作,下面看看结果吧:

asp.net MVC利用ActionFilterAttribute过滤关键字的方法

我们可以清楚的看到,输入结果,输出后,一对尖角号被转义了。

希望本文所述对大家asp.net程序设计有所帮助。

标签:
asp.net,MVC,ActionFilterAttribute,过滤,关键字

明霞山资源网 Design By www.htccd.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
明霞山资源网 Design By www.htccd.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。