以下类可以在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. vmware-workstation-11中centos-6.6安装

    排版比较乱,参见 https://www.zybuluo.com/Jpz/note/144303 VMware Workstation 11中CentOS 6.6安装 Linux开发环境配置 目录 V ...

  2. 144. Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. For example:Given binary tr ...

  3. codevs 1299 线段树 区间更新查询

    1299 切水果  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description 简单的说,一共N个水果排成 ...

  4. c 函数及指针学习 5

    聚合数据类型 能够同时存储超过一个的单独数据. c语言提供了数组和结构体. 1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> # ...

  5. 常用的phpstorm设置

    1.始终在项目编辑器中显示行号[Show line numbers],可以通过File->Setting->Editor->Appearance->Show line numb ...

  6. JS初学之-选项卡(常见)

    思路:鼠标滑过的效果直接用a:hover实现的,比较简便,缺点是在IE下不兼容.   为每一个Li添加点击事件,将每一个li用自定义属性的方法与div相匹配,重点是在点击事件内,要先遍历每一个div, ...

  7. vimium 使用心得

    首先,建议记住chrom自己的支持的快捷键 https://support.google.com/chrome/answer/157179?hl=zh-Hans&hlrm=en-GB& ...

  8. 【NOIP2010】【P1317】乌龟棋

    似乎很像搜索的DP(应该也可以用搜索写) 原题: 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物.乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N 格是终点, ...

  9. python3安装Fabric模块

    streamparse 项目的issuehttps://github.com/Parsely/streamparse/issues/172 fabric的一个支持Python3.4的forkhttps ...

  10. thinkphp3.2 学习

    http://www.tuicool.com/articles/nQFnQrR 1,sublime text 增强插件 右键可以打开文件目录 http://www.w3cfuns.com/notes/ ...