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提交是在后台偷偷提交,不会刷新页面,因此也就可以保留页面输入框内 ...
随机推荐
- DB2 函数大全
DB2函数大全 函数名 函数解释 函数举例 AVG() 返回一组数值的平均值. SELECTAVG(SALARY)FROMBSEMPMS; CORR(),CORRELATION() 返回一对数值的关系 ...
- 143. Reorder List
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...
- 隐马尔科夫模型(HMM)的概念
定义隐马尔科夫模型可以用一个三元组(π,A,B)来定义:π 表示初始状态概率的向量A =(aij)(隐藏状态的)转移矩阵 P(Xit|Xj(t-1)) t-1时刻是j而t时刻是i的概率B =(bij) ...
- Spring MVC 使用拦截器优雅地实现权限验证功能
在上一篇 SpringAOP 实现功能权限校验功能 中虽然用AOP通过抛异常,请求转发等勉强地实现了权限验证功能,但感觉不是那么完美,应该用拦截器来实现才是最佳的,因为拦截器就是用来拦截请求的,在请求 ...
- Mybatis学习 —— 包括所有 mybatis官网
http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases
- arraylist 转json
java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException 标签: cla ...
- ubuntu 14.04 apache maven 安装
下载maven http://maven.apache.org/download.cgi 解压 tar -xzvf apache-maven-3.0.5-bin.tar.gz -C /usr/loc ...
- 一些基本的C/C++数据类型
size_t size_t. A basic unsigned integer C/C++ type. It is the type of the result returned by sizeof ...
- Oracle学习系列3
Oracle学习系列3 ************************************************************************************ 多表查 ...
- python中文输出和写入文本
中文输出 #-*-coding:utf8-*- import requests import re timeout = 8 headers = {'User-Agent':'Mozilla/5.0 ( ...