EntityFrameWork+MVC防SQL注入

EntityFrameWork(以后简称EF)作为一款ORM非常的实用,能够大幅度的提高开发速度,但是EF的实质也是sql语句,同样需要防sql注入,在这里利用过滤器的特性来实现过滤特殊字符。

1.首先是过滤的代码

 1 public class SqlFilterAttribute : FilterAttribute, IActionFilter
 2     {
 3 
 4         public void OnActionExecuted(ActionExecutedContext filterContext)
 5         {
 6             throw new NotImplementedException();
 7         }
 8 
 9         public void OnActionExecuting(ActionExecutingContext filterContext)
10         {
11             //获得action的参数
12             var actions = filterContext.ActionDescriptor.GetParameters();
13 
14             //遍历所有的参数
15             foreach (var action in actions)
16             {
17                 if (action.ParameterType == typeof(string))
18                 {
19                     if (filterContext.ActionParameters[action.ParameterName] != null)
20                     {
21                         filterContext.ActionParameters[action.ParameterName] = SqlFilter(filterContext.ActionParameters[action.ParameterName].ToString());
22                     }
23                 }
24             }
25         }
26 
27         private const string SQL_FILTER_STRINGS = "=,',:, or ,select,update,insert,delete,declare,exec,drop,create,%,--";
28 
29         /// <summary>
30         /// 过滤字符串
31         /// </summary>
32         /// <param name="filterStr"></param>
33         /// <returns></returns>
34         private string SqlFilter(string filterStr)
35         {
36             if (!string.IsNullOrEmpty(filterStr))
37             {
38                 foreach (var item in SQL_FILTER_STRINGS.Split(','))
39                 {
40                     //替换掉特殊字符
41                     filterStr = filterStr.ToLower().Replace(item, "");
42                 }
43             }
44             return filterStr;
45         }
46     }

2.调用sql过滤

public class DefaultController : Controller
    {
        // GET: Default
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        [SqlFilter]
        public ActionResult Index(string s)
        {
            return View();
        }
    }

测试之后发现要求过滤的字符确实被过滤掉了。

转载于:https://www.cnblogs.com/Yuuuuu/p/7830989.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值