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提交是在后台偷偷提交,不会刷新页面,因此也就可以保留页面输入框内 ...
随机推荐
- iOS学习笔记---oc语言第二天
实例变量与方法 一.实例变量的可见度 二.方法 oc中的方法分两种:类方法和实例方法 类方法:只能类使用 eg:+ (id)alloc 注:类方法中不能使用实例变量 实例方法:只能对象使用,eg:- ...
- Conference Search不错的学术会议日程提示网站
一个不错的学术会议日程提示网站 http://www.confsearch.org,还可以通过内嵌框架(embedded iframe)集成到自己的网页上. http://www.confsearch ...
- 通过joystick遥感和按键控制机器人--11
原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 1.首先安装joystick遥控器驱动: sudo apt-get install ros-indigo ...
- python 文件编码
错误:UnicodeDecodeError: 'gbk' codec can't decode byte 原因:文件为utf-8编码,系统却用gbk去解码,必然出现错误. 解决方法: with ope ...
- JavaWeb学习记录(十三)——商城购物之添加订单的数据库级联操作
一.方法实现 private JdbcTemplate jdbcTemplate = new JdbcTemplate(DBConn.getDataSource()); @SuppressWarnin ...
- Codeforces Round #119 (Div. 2)
A. Cut Ribbon \(f(i)\)表示长为\(i\)的布条最多可以剪几段. B. Counting Rhombi \(O(wh)\)枚举中心计算 C. Permutations 将序列一映射 ...
- Sublime Text3快捷方式与使用技巧
Sublime Text 3 快捷键精华版 Ctrl+Shift+P: 打开命令面板Ctrl+P: 搜索项目中的文件Ctrl+G: 跳转到第几行Ctrl+W: 关闭当前打开文件Ctrl+Shift ...
- 主机连接虚拟机 web服务
主机上安装了个VM centeros 首先通过 终端:ifconfig eth0 查看虚拟机的Ip地址 这样就能在主机上通过浏览器http://192.168.150.128/a.php 访问虚拟机的 ...
- adaptive hash index
An optimization for InnoDB tables that can speed up lookups using = and IN operators, by constructin ...
- shell之任务控制
http://linux.cn/article-2680-1.html 你的 shell 会留有一张当前作业的表单,称为作业表.当你键入命令时,shell 会给它分配一个 jobID(也称作 JOBS ...