ASP.NET地址栏form提交安全验证
以下类可以在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" />
安全模块类文件:
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Web;
- using System.Text.RegularExpressions;
- using System.IO;
- namespace SecModule
- {
- public class CheckUrlParameter : IHttpModule
- {
- #region IHttpModule 成员
- public void Dispose()
- {
- }
- public void Init(HttpApplication context)
- {
- context.BeginRequest += new EventHandler(context_BeginRequest);
- }
- void context_BeginRequest(object sender, EventArgs e)
- {
- HttpApplication application = (HttpApplication)sender;
- HttpContext context = application.Context;
- // 做些实际的工作,HttpContext对象都获得了,剩下的基本可以自由发挥了
- //检测URL安全信息
- if (!context.Request.RawUrl.Contains("WebResource") && !context.Request.RawUrl.Contains("ScriptResource") && context.Request.QueryString.Count > )
- {
- for (int i = ; i < context.Request.QueryString.Count; i++)
- {
- if (CheckUrl(context.Request.QueryString[i]))
- {
- context.Response.Redirect("~/UserControl/ErrorPage.html?err=6");
- context.Response.End();
- }
- }
- }
- //检测上传文件的安全信息
- string ext = "";
- for (int i = ; i < context.Request.Files.Count; i++)
- {
- ext = Path.GetExtension(context.Request.Files[i].FileName).ToLower();
- if (ext == ".aspx" || ext == ".asp" || ext == ".php" || ext == ".jsp")
- {
- context.Response.Write("<script type='text/javascript'>alert('禁止上传非法文件!');location.href=location.href;</script>");
- context.Response.End();
- }
- }
- //检测Form表单值的安全信息
- string parmeter = "";
- for (int i = ; i < context.Request.Form.Count; i++)
- {
- parmeter = context.Request.Form[i];
- if (context.Request.Form.AllKeys[i] == "__VIEWSTATE") continue;
- if (CheckForm(parmeter))
- {
- if (context.Request.RawUrl.ToLower().Contains("ajax"))
- {
- context.Response.Write("输入内容有非法字符!");
- }
- else
- {
- context.Response.Write("<script type='text/javascript'>alert('输入内容有非法字符!');location.href=location.href;</script>");
- }
- context.Response.End();
- }
- }
- }
- /// <summary>
- /// 检测URL参数
- /// </summary>
- /// <param name="parameter">传入参数值</param>
- /// <returns>有危险返回True,无返回False</returns>
- public bool CheckUrl(string parameter)
- {
- Regex reg = new Regex("--|\"|\'|=|db_name|<script>|[*]|sysobjects|sysdatabases|syscolumns|select|from|drop|delete|insert|update|exec", RegexOptions.IgnoreCase);
- return reg.IsMatch(parameter);
- }
- /// <summary>
- /// 检测Form表单
- /// </summary>
- /// <param name="FormValue">传入表单值</param>
- /// <returns></returns>
- public bool CheckForm(string FormValue)
- {
- Regex reg = new Regex("--|db_name|<script>|drop|insert", RegexOptions.IgnoreCase);
- return reg.IsMatch(FormValue);
- }
- #endregion
- }
- }
ASP.NET地址栏form提交安全验证的更多相关文章
- ASP.NET MVC Form表单验证与Authorize特性
一.Form表单验证 1.基本概念 表单验证是一个基于票据(ticket-based)[也称为基于令牌(token-based)]的系统.当用户登录系统以后,会得到一个包含基于用户信息的票据(tick ...
- Django在form提交CSRF验证失败. 相应中断问题
CSRF验证失败. 相应中断. 1).首先,我们可以先看一下出现问题的所在的原因. Your browser is accepting cookies. The view function passe ...
- easyui form提交时验证必填,打开时不显示必填提示
给textbox添加required:true属性后,打开页面时整个表单都是红的,需要将其设置为提交时再验证. 解决方法:通过textbox的novalidate属性来控制是否开启验证 <inp ...
- jquery.form.js实现将form提交转为ajax方式提交的使用方法
本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...
- jquery.form.js实现将form提交转为ajax方式提交的方法
本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...
- 利用jquery.form.js实现将form提交转为ajax方式提交的方法(带上传的表单提交)
提供一种方法就是利用jquery.form.js. (1)这个框架集合form提交.验证.上传的功能. 核心方法 -- ajaxForm() 和 ajaxSubmit() $('#myForm').a ...
- ASP.NET Web Form和MVC中防止F5刷新引起的重复提交问题
转载 http://www.cnblogs.com/hiteddy/archive/2012/03/29/Prevent_Resubmit_When_Refresh_Reload_In_ASP_NET ...
- AngularJS系列:表单全解(表单验证,radio必选,三级联动,check绑定,form提交验证)
一.查看$scope -->寻找Form控制变量的位置 Form控制变量 格式:form的name属性.input的name属性.$... formName.inputField.$pristi ...
- 框架----Django之Form提交验证(一)
一.Form提交验证与Ajax提交验证的运用实例 Form表单提交时会刷新页面,输入失败时,输入框内内容也会随之刷新不能保留:而Ajax提交是在后台偷偷提交,不会刷新页面,因此也就可以保留页面输入框内 ...
随机推荐
- 【字体区别】Serif和Sans Serif
[字体区别]Serif和Sans Serif 在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Mo ...
- 148. Sort List
Sort a linked list in O(n log n) time using constant space complexity. 代码如下: /** * Definition for si ...
- jQuery停止动画和判断是否处于动画状态
1.停止元素的动画 stop([clearQueue][,gotoEnd]); 参数clearQHCHC和gotoEnd都足町选的参数,为Boolean值(ture或flase).clearQueue ...
- Windows && Linux 双系统
使用软件 EasyBCD 添加新条目--->NeoGrub--->安装--->配置 在弹出的文本中输入如下东西: title Install Backbox root (hd0,0) ...
- What is Proguard?
When packaging an apk, all classes of all libraries used by the program will be included, this makes ...
- [poj 3261]Milk Patterns
后缀数组搞一下就可以了喵~ 其实这道题的第一个想法是 SAM ,建完后缀自动机后拓扑排序跑一遍统计下每个子串的出现次数就 O(N) 就妥妥过掉了 后缀树也是 O(N) 的,统计一下每个节点对应的子树中 ...
- STL 简介,标准模板库
这篇文章是关于C++语言的一个新的扩展--标准模板库的(Standard Template Library),也叫STL. 当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话 ...
- Retrofit2文件上传下载及其进度显示
序 前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示. 文件上传 定义接口 1 2 3 @Multip ...
- JavaScript常用表单验证正则表达式(身份证、电话号码、邮编、日期、IP等)
身份证正则表达式 //身份证正则表达式(15位)isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;//身份证正则表达式 ...
- 如何让div水平垂直居中
引子 我们经常遇到需要把div中的内容进行水平和垂直居中.所以,这里介绍一种方法,可以使div水平居中和垂直居中. 代码: <!DOCTYPE html> <html lang=&q ...