以下类可以在web.config中直接配置,可以防范地址栏、表单提交的恶意数据。

安全模块作用:

a.针对URL参数验证的功能,防止sql注入

b.针对form表单XSS漏洞的防护功能

c.针对上传文件的检测功能,防范网站上传漏洞攻击

d.优化URL参数检测方式,不会对正常的js封装库拦截

e.上传文件验证jsp防护

f.正常页面参数包含select被拦截的问题

g.拦截关键字db_name/insert/drop等

安全模块使用方法:

在web.config配置文件<httpModules></httpModules>中加入以下代码:

<add name="SecModule" type="SecModule.CheckUrlParameter,SecModule" />

安全模块类文件:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Web;
  5. using System.Text.RegularExpressions;
  6. using System.IO;
  7.  
  8. namespace SecModule
  9. {
  10. public class CheckUrlParameter : IHttpModule
  11. {
  12.  
  13. #region IHttpModule 成员
  14.  
  15. public void Dispose()
  16. {
  17.  
  18. }
  19.  
  20. public void Init(HttpApplication context)
  21. {
  22. context.BeginRequest += new EventHandler(context_BeginRequest);
  23. }
  24. void context_BeginRequest(object sender, EventArgs e)
  25. {
  26. HttpApplication application = (HttpApplication)sender;
  27. HttpContext context = application.Context;
  28. // 做些实际的工作,HttpContext对象都获得了,剩下的基本可以自由发挥了
  29.  
  30. //检测URL安全信息
  31. if (!context.Request.RawUrl.Contains("WebResource") && !context.Request.RawUrl.Contains("ScriptResource") && context.Request.QueryString.Count > )
  32. {
  33. for (int i = ; i < context.Request.QueryString.Count; i++)
  34. {
  35. if (CheckUrl(context.Request.QueryString[i]))
  36. {
  37. context.Response.Redirect("~/UserControl/ErrorPage.html?err=6");
  38. context.Response.End();
  39. }
  40. }
  41. }
  42.  
  43. //检测上传文件的安全信息
  44. string ext = "";
  45. for (int i = ; i < context.Request.Files.Count; i++)
  46. {
  47. ext = Path.GetExtension(context.Request.Files[i].FileName).ToLower();
  48. if (ext == ".aspx" || ext == ".asp" || ext == ".php" || ext == ".jsp")
  49. {
  50. context.Response.Write("<script type='text/javascript'>alert('禁止上传非法文件!');location.href=location.href;</script>");
  51. context.Response.End();
  52. }
  53. }
  54.  
  55. //检测Form表单值的安全信息
  56. string parmeter = "";
  57. for (int i = ; i < context.Request.Form.Count; i++)
  58. {
  59.  
  60. parmeter = context.Request.Form[i];
  61. if (context.Request.Form.AllKeys[i] == "__VIEWSTATE") continue;
  62. if (CheckForm(parmeter))
  63. {
  64. if (context.Request.RawUrl.ToLower().Contains("ajax"))
  65. {
  66. context.Response.Write("输入内容有非法字符!");
  67. }
  68. else
  69. {
  70. context.Response.Write("<script type='text/javascript'>alert('输入内容有非法字符!');location.href=location.href;</script>");
  71. }
  72. context.Response.End();
  73. }
  74. }
  75. }
  76. /// <summary>
  77. /// 检测URL参数
  78. /// </summary>
  79. /// <param name="parameter">传入参数值</param>
  80. /// <returns>有危险返回True,无返回False</returns>
  81. public bool CheckUrl(string parameter)
  82. {
  83. Regex reg = new Regex("--|\"|\'|=|db_name|<script>|[*]|sysobjects|sysdatabases|syscolumns|select|from|drop|delete|insert|update|exec", RegexOptions.IgnoreCase);
  84. return reg.IsMatch(parameter);
  85. }
  86.  
  87. /// <summary>
  88. /// 检测Form表单
  89. /// </summary>
  90. /// <param name="FormValue">传入表单值</param>
  91. /// <returns></returns>
  92. public bool CheckForm(string FormValue)
  93. {
  94. Regex reg = new Regex("--|db_name|<script>|drop|insert", RegexOptions.IgnoreCase);
  95. return reg.IsMatch(FormValue);
  96. }
  97.  
  98. #endregion
  99. }
  100. }

ASP.NET地址栏form提交安全验证的更多相关文章

  1. ASP.NET MVC Form表单验证与Authorize特性

    一.Form表单验证 1.基本概念 表单验证是一个基于票据(ticket-based)[也称为基于令牌(token-based)]的系统.当用户登录系统以后,会得到一个包含基于用户信息的票据(tick ...

  2. Django在form提交CSRF验证失败. 相应中断问题

    CSRF验证失败. 相应中断. 1).首先,我们可以先看一下出现问题的所在的原因. Your browser is accepting cookies. The view function passe ...

  3. easyui form提交时验证必填,打开时不显示必填提示

    给textbox添加required:true属性后,打开页面时整个表单都是红的,需要将其设置为提交时再验证. 解决方法:通过textbox的novalidate属性来控制是否开启验证 <inp ...

  4. jquery.form.js实现将form提交转为ajax方式提交的使用方法

    本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...

  5. jquery.form.js实现将form提交转为ajax方式提交的方法

    本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...

  6. 利用jquery.form.js实现将form提交转为ajax方式提交的方法(带上传的表单提交)

    提供一种方法就是利用jquery.form.js. (1)这个框架集合form提交.验证.上传的功能. 核心方法 -- ajaxForm() 和 ajaxSubmit() $('#myForm').a ...

  7. ASP.NET Web Form和MVC中防止F5刷新引起的重复提交问题

    转载 http://www.cnblogs.com/hiteddy/archive/2012/03/29/Prevent_Resubmit_When_Refresh_Reload_In_ASP_NET ...

  8. AngularJS系列:表单全解(表单验证,radio必选,三级联动,check绑定,form提交验证)

    一.查看$scope -->寻找Form控制变量的位置 Form控制变量 格式:form的name属性.input的name属性.$... formName.inputField.$pristi ...

  9. 框架----Django之Form提交验证(一)

    一.Form提交验证与Ajax提交验证的运用实例 Form表单提交时会刷新页面,输入失败时,输入框内内容也会随之刷新不能保留:而Ajax提交是在后台偷偷提交,不会刷新页面,因此也就可以保留页面输入框内 ...

随机推荐

  1. 【字体区别】Serif和Sans Serif

    [字体区别]Serif和Sans Serif 在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Mo ...

  2. 148. Sort List

    Sort a linked list in O(n log n) time using constant space complexity. 代码如下: /** * Definition for si ...

  3. jQuery停止动画和判断是否处于动画状态

    1.停止元素的动画 stop([clearQueue][,gotoEnd]); 参数clearQHCHC和gotoEnd都足町选的参数,为Boolean值(ture或flase).clearQueue ...

  4. Windows && Linux 双系统

    使用软件 EasyBCD 添加新条目--->NeoGrub--->安装--->配置 在弹出的文本中输入如下东西: title Install Backbox root (hd0,0) ...

  5. What is Proguard?

    When packaging an apk, all classes of all libraries used by the program will be included, this makes ...

  6. [poj 3261]Milk Patterns

    后缀数组搞一下就可以了喵~ 其实这道题的第一个想法是 SAM ,建完后缀自动机后拓扑排序跑一遍统计下每个子串的出现次数就 O(N) 就妥妥过掉了 后缀树也是 O(N) 的,统计一下每个节点对应的子树中 ...

  7. STL 简介,标准模板库

    这篇文章是关于C++语言的一个新的扩展--标准模板库的(Standard Template Library),也叫STL.  当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话 ...

  8. Retrofit2文件上传下载及其进度显示

    序 前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示. 文件上传 定义接口 1 2 3 @Multip ...

  9. JavaScript常用表单验证正则表达式(身份证、电话号码、邮编、日期、IP等)

    身份证正则表达式 //身份证正则表达式(15位)isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;//身份证正则表达式 ...

  10. 如何让div水平垂直居中

    引子 我们经常遇到需要把div中的内容进行水平和垂直居中.所以,这里介绍一种方法,可以使div水平居中和垂直居中. 代码: <!DOCTYPE html> <html lang=&q ...