手机版

ASP.NET MVC使用ActionFilterAttribute来过滤关键词

时间:2021-11-05 来源:互联网 编辑:宝哥软件园 浏览:

本文介绍了在ASP.NET用MVC模式用ActionFilterAttribute过滤关键词的方法。分享给大家参考,如下:

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

请参见以下步骤:

首先,当用户输入自己的名字并包含类似BR的内容时,MVC默认需要验证内容,因此会抛出一个黄页错误,提示用户已经从客户端检测到潜在风险的Request值。这种页面极其不友好,也是我们作为开发者最不愿意看到的页面。通过在响应页面的ActionResult中添加[ValidateInput(false)]来屏蔽这个错误非常简单,这样当用户提交时,页面就不会再次检查输入的内容。

如果容忍这样的行为,就会对系统的安全性造成威胁,所以最好的解决办法就是逃避相似性。

让我们使用ActionFilterAttribute来构造我们自己的转义过滤器类:

使用系统。Web . Mvc使用TinyFrame。插件。strong类型化。模型;命名空间TinyFrame。plugin . strong typed { public class filtercharsatattribute : ActionFilterAttribute { protected string parameter name=' t ';受保护的TestModel模型;public override void on actionexecuting(actionexecuting context filter context){ base。操作执行(过滤器上下文);//无参数,将直接返回。if(!filterContext。action parameters . contains key(parameter name))返回;var t=filterContext。action parameters[parameter name]作为测试模型;//无实体数据,如果(t==null)返回将直接返回;//替换应该筛选的字符,如果(!字符串。IsNullOrEmpty(t . TName))t . TName=t . TName . replace(',' lt ')。替换(',' gt ');if(!字符串。IsNullOrEmpty(t . TSite))t . TSite=t . TSite . replace(',' lt ')。替换(',' gt ');第八行代表用户输入的实体类参数。具体的控制器代码如下:

public action result Index(test model t){ view data[' converted model ']=t;返回视图();}在第11行中,我们可以通过重载OnActionExecuting方法来定义自己的Filter。

第19行,将获得的输入结果转换为实体。

第27行和第29行避开了潜在的危险人物。

写完之后,我们创建了一个过滤器,可以过滤掉关键词。如果想要通用,需要遍历输入filterContext。ActionParameters,通过反射构建实例,然后通过反射字段值实现通用关键词过滤。我这里只提供思路,具体措施由我来定。

然后将此方法添加到控制器中要检测的页面的标题中,即:

[ValidateInput(false)][filter chars]public action result Index(test model t){ view data[' converted model ']=t;返回视图();}这样,我们就完成了对输入数据的过滤。让我们看看下面的结果:

我们可以清楚地看到,在输入结果并输出后,一对尖角逃脱了。

希望这篇文章对大家的ASP.NET编程有所帮助。

版权声明:ASP.NET MVC使用ActionFilterAttribute来过滤关键词是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。