以下类可以在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提交安全验证的更多相关文章

  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. HttpResponse的Close和End 区别

    转载自:http://blog.sina.com.cn/s/blog_702c390c0100mlhi.html 最近启用了IIS上的压缩功能,但是测试系统上某模块变得不可用了.该模块采用AJAX技术 ...

  2. java访问webservce,保持会话,服务端保存session验证

    在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...

  3. centos网页乱码

    修改vi /etc/my.cnf  [client] (新增)default-character-set=utf8  [mysql] (添加)default-character-set=utf8

  4. Java-->多线程复制(文件指针)

    --> 这里用到两种方法...其实也不算两种,就一点点不一样而已... ---> Test 测试类 package com.dragon.java.multithreadcopy; imp ...

  5. Codeforces Round #310 (Div. 2) A B C

    A. Case of the Zeros and Ones time limit per test 1 second memory limit per test 256 megabytes input ...

  6. left join测试验证之一

    $ sqlite3 a.dbSQLite version 3.8.1 2013-10-17 12:57:35Enter ".help" for instructionsEnter ...

  7. live555源代码编译

    参考http://www.cnblogs.com/MikeZhang/archive/2013/04/24/live555Windows_20130424.html 环境:windowsxp + VS ...

  8. java03实验截图

  9. leetcode 129. Sum Root to Leaf Numbers ----- java

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...

  10. 越狱Season 1-Episode 6: Riots, Drills and the Devil: Part 1

    Season 1, Episode 6: Riots, Drills and the Devil: Part 1 - Diamond: Just a few more rides. 就再多玩几次吧 O ...