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 > 0)
            {
                for (int i = 0; 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 = 0; 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 = 0; 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
    }
}
时间: 2024-11-13 23:53:38

ASP.NET地址栏form提交安全验证的相关文章

jquery.form.js实现将form提交转为ajax方式提交的使用方法

本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完整版结合,否则使用min则无效. 原理:利用js进行对form进行组装成ajax的url和data,原理还是用ajax来提交,其实这完全可以自己写,但是有这个框架可能会更简单. 一.最简单例子: 第一步:引用js <!--这里的min是自己用js压缩工具对完整版进行的压缩 并不是真正的min,所以好

ASP.NET Web Form和MVC中防止F5刷新引起的重复提交问题

转载  http://www.cnblogs.com/hiteddy/archive/2012/03/29/Prevent_Resubmit_When_Refresh_Reload_In_ASP_NET_Web_Form_MVC.html 什么是刷新/重新载入 IE中的刷新(Refresh),在FF和Chrome中称为重新载入(Reload),与正常进入页面的区别在于以下两点: 1. 缓存控制 如果文件(比如图片)在本地缓存中已经存在,正常进入页面会不访问服务器而直接从本地加载.而对于刷新操作,

asp.net MVC中控制器获取表单form提交的数据之实体类数据

第一次写记录文章,难免有不足之处:欢迎指出. 1.新建一个mvc项目如: 2.新建一个Test.cs 注意get,set方法不能简写 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 using System; using System.Collections.Generic; using System.Linq; usi

框架----Django之Form提交验证(二)

一.Form提交验证之(学生表.老师表.班级表)的添加和编辑实现案例 1. 浏览器访问 http://127.0.0.1:8000/student_list/ http://127.0.0.1:8000/teacher_list/ http://127.0.0.1:8000/class_list/ 2. models 1 from django.db import models 2 3 class Classes(models.Model): 4 title = models.CharField

JavaScript基础 submit按钮配合form的onsubmit实现表单的提交与验证

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

javascprit form表单提交前验证以及ajax返回json

1.今天要做一个手机验证码验证的功能.需求是前端页面点击发送 短信验证码,后台接收后通过ajax返回到前端,之后前端在提交时候进行验证.思路很简单,不过做的过程还是学到不少的东西. 1.ajax请求后返回 returning 405 Method Not Allowed 原因是我后台返回的时候没有加上: @ResponseBody注解.加上后返回的数据是json字符串,但是js只能操作json对象.需要把json字符串转为json对象.一般的有三种方式1.JSON.parse();如 var j

form表单提交,上传文件以及提交前验证的问题。

form表单是在开发中比较基础也比较常见的问题了,今天就给大家分享一下有关form表单提交的一些小问题. 首先我们来看一下基本的form结构.这里面我直接引用的bootstrap的form表单的框架. <form class="form-horizontal" id="form1" name="myForm" action="/cgjxx/fwjl_delete_servlet" method="post&qu

java Html&amp;JavaScript面试题:HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交?

提交的验证方法(通过单个字符比较): <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> VerifyDate <form id="form1" action="VefifyData.html"&g

asp.net MVC中form提交和控制器接受form提交过来的数据

MVC中form提交和在控制器中怎样接受 1.cshtml页面form提交2.控制器处理表单提交数据4种方式方法1:使用传统的Request请求取值[HttpPost]public ActionResult AddNews(){    string a=Request["text1"];    string b=Request["text2"];}方法2:Action参数名与表单元素name值一一对应[HttpPost]public ActionResult Add