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提交是在后台偷偷提交,不会刷新页面,因此也就可以保留页面输入框内 ...
随机推荐
- HttpResponse的Close和End 区别
转载自:http://blog.sina.com.cn/s/blog_702c390c0100mlhi.html 最近启用了IIS上的压缩功能,但是测试系统上某模块变得不可用了.该模块采用AJAX技术 ...
- java访问webservce,保持会话,服务端保存session验证
在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...
- centos网页乱码
修改vi /etc/my.cnf [client] (新增)default-character-set=utf8 [mysql] (添加)default-character-set=utf8
- Java-->多线程复制(文件指针)
--> 这里用到两种方法...其实也不算两种,就一点点不一样而已... ---> Test 测试类 package com.dragon.java.multithreadcopy; imp ...
- 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 ...
- left join测试验证之一
$ sqlite3 a.dbSQLite version 3.8.1 2013-10-17 12:57:35Enter ".help" for instructionsEnter ...
- live555源代码编译
参考http://www.cnblogs.com/MikeZhang/archive/2013/04/24/live555Windows_20130424.html 环境:windowsxp + VS ...
- java03实验截图
- 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 ...
- 越狱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 ...