`
hanbaobao
  • 浏览: 21540 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

C#如何防SQL注入代码的实现一种小方法

阅读更多

网站安全性:C#防SQL注入代码的实现方法
 对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位。

下面说下网站防注入的几点要素。

一:丢弃SQL语句直接拼接,虽然这个写起来很快很方便。

二:如果用SQL语句,那就使用参数化,添加Param

三:尽可能的使用存储过程,安全性能高而且处理速度也快

四:屏蔽SQL,javascript等注入(很是主要的),对于每个文件写是不太可能的。所以要找到对所有文件起作用的办法。我在网上收集了以下3种方法

C#防SQL注入方法一

Web.config文件中, < appSettings>下面增加一个标签:如下

< appSettings>  

< add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip" />  

< /appSettings> 


其中key是 < saveParameters>后面的值为"OrderId-int32"等,其中"-"前面表示参数的名称比如:OrderId,后面的int32表示数据类型。

C#防SQL注入方法二

在Global.asax中增加下面一段:

protected void Application_BeginRequest(Object sender, EventArgs e){  

String[] safeParameters = System.Configuration.ConfigurationSettings.AppSettings["safeParameters"].ToString().Split(',');  

for(int i= 0 ;i <  safeParameters.Length; i++){  

String parameterName = safeParameters[i].Split('-')[0];  

String parameterType = safeParameters[i].Split('-')[1];  

isValidParameter(parameterName, parameterType);  

}  

}  

public void isValidParameter(string parameterName, string parameterType){  

string parameterValue = Request.QueryString[parameterName];  

if(parameterValue == null) return;  

if(parameterType.Equals("int32")){  

if(!parameterCheck.isInt(parameterValue)) Response.Redirect("parameterError.aspx");  

}  

else if (parameterType.Equals("USzip")){  

if(!parameterCheck.isUSZip(parameterValue)) Response.Redirect("parameterError.aspx");  

}  

else if (parameterType.Equals("email")){  

if(!parameterCheck.isEmail(parameterValue)) Response.Redirect("parameterError.aspx");  

}  


C#防SQL注入方法三

使用字符串过滤

using System; 

namespace web.com

{  

    /**//// < summary>  

    /// ProcessRequest 的摘要说明。  

    /// < /summary>  

    public class ProcessRequest  

    {  

        public ProcessRequest()  

        {  

            //  

            // TODO: 在此处添加构造函数逻辑  

            //  

        }  

        SQL注入式攻击代码分析#region SQL注入式攻击代码分析  

        /**//// < summary>  

        /// 处理用户提交的请求  

        /// < /summary>  

        public static void StartProcessRequest()  

        {  

 

//            System.Web.HttpContext.Current.Response.Write("< script>alert('dddd');< /script>");  

            try 

            {  

                string getkeys = "";  

                //string sqlErrorPage = System.Configuration.ConfigurationSettings.AppSettings["CustomErrorPage"].ToString();  

                if (System.Web.HttpContext.Current.Request.QueryString != null)  

                {  

 

                    for(int i=0;i< System.Web.HttpContext.Current.Request.QueryString.Count;i++)  

                    {  

getkeys=System.Web.HttpContext.Current.Request.QueryString.Keys[i]; if(!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys],0)) { //System.Web.HttpContext.Current.Response.Redir
 
 getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys[i];  

                        if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys],0))  

                        {  

                            //System.Web.HttpContext.Current.Response.Redirect (sqlErrorPage+"?errmsg=sqlserver&sqlprocess=true");  

                            System.Web.HttpContext.Current.Response.Write("< script>alert('请勿非法提交!');history.back();< /script>");  

                            System.Web.HttpContext.Current.Response.End();  

                        }  

                    }  

                }  

                if (System.Web.HttpContext.Current.Request.Form != null)  

                {  

                    for(int i=0;i< System.Web.HttpContext.Current.Request.Form.Count;i++)  

                    {  

                        getkeys = System.Web.HttpContext.Current.Request.Form.Keys[i];  

                        if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys],1))  

                        {  

  //System.Web.HttpContext.Current.Response.Redirect (sqlErrorPage+"?errmsg=sqlserver&sqlprocess=true");  

                            System.Web.HttpContext.Current.Response.Write("< script>alert('请勿非法提交!');history.back();< /script>");  

                            System.Web.HttpContext.Current.Response.End();  

                        }  

                    }  

                }  

            }  

            catch 

            {  

                // 错误处理: 处理用户提交信息!  

            }  

        }  

        /**//// < summary>  

        /// 分析用户请求是否正常  

        /// < /summary>  

        /// < param name="Str">传入用户提交数据< /param>  

        /// < returns>返回是否含有SQL注入式攻击代码< /returns>  

        private static bool ProcessSqlStr(string Str,int type)  

        {  

            string SqlStr;  

            if(type == 1)  

                SqlStr = pdf"exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare ";  

SqlStr = "'|and|exec|insert|select|delete|update|count|*|chr|mid|master|truncate|char|declare";  

            bool ReturnValue = true;  

            try 

            {  

                if (Str != "")  

                {  

                    string[] anySqlStr = SqlStr.Split('|');  

                    foreach (string ss in anySqlStr)  

                    {  

                        if (Str.IndexOf(ss)>=0)  

                        {  

                            ReturnValue = false;  

                        }  

                    }  

                }  

            }  

            catch 

            {  

                ReturnValue = false;  

            }  

            return ReturnValue;  

        }  

分享到:
评论

相关推荐

    C#防SQL注入代码的三种方法

    对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全... C#防SQL注入方法一  在Web.config文件中

    C#防SQL注入

    在代码实现层面,可以采用一些自动化的方法来防止SQL注入,例如创建一个过滤器,对所有的用户输入进行检测。文章中提到的SqlFilter2方法就是一个示例,它通过检查用户输入中是否包含特定的SQL关键字来判断是否存在...

    C#防SQL注入代码

    本篇将详细介绍如何在C#中防止SQL注入,主要涉及三个核心部分:验证方法、Global.asax事件以及Global中的一个特定方法。 一、验证方法 验证方法是预防SQL注入的第一道防线,它对用户输入的数据进行检查和清理,确保...

    c# 全站防止sql注入

    在开发Web应用时,SQL注入是一种常见的安全威胁,攻击者可以通过构造恶意的SQL语句来窃取、修改或破坏数据库中的数据。C#全站防止SQL注入是确保应用程序安全的关键措施,下面将详细介绍如何利用Global.asax和App_...

    防止sql注入小方法

    ### 防止SQL注入小方法 #### 一、引言 随着互联网技术的发展和广泛应用,信息安全成为企业和个人越来越关注的重点。SQL注入攻击是数据库安全领域中最常见的威胁之一,它利用应用程序中的漏洞向数据库发送恶意SQL...

    C# 防止SQL注入式攻击

    在IT行业中,数据库的安全性是至关重要的,而SQL注入攻击是一种常见的网络安全威胁,它允许攻击者通过输入恶意的SQL代码来操纵或获取未经授权的数据。在C#编程中,开发人员需要采取有效措施来防范此类攻击。本文将...

    C#高效连接sql数据库 防sql 注入

    除了参数化查询外,使用存储过程也是一种很好的防止SQL注入的方法。存储过程是在数据库服务器上预先定义好的SQL代码段,它可以接受参数并返回结果。与参数化查询类似,存储过程同样能够有效防止SQL注入。例如: ```...

    SQL 防注入代码全集

    SQL注入是一种常见的网络安全威胁,它允许攻击者通过输入恶意的SQL语句来操纵数据库,获取、修改或删除敏感数据。本资源"SQL 防注入代码全集"提供了多种编程语言(如ASP和C#)的防御策略,帮助开发者保护其应用程序...

    一种基于抽象语法树的C#源代码SQL注入漏洞检测算法.pdf

    总结而言,这篇论文提出的基于抽象语法树的C#源代码SQL注入漏洞检测算法,为防止应用程序遭受SQL注入攻击提供了重要的技术支撑。这一方法通过对代码结构进行深入解析,有效识别出潜在的漏洞,从而提高软件的整体安全...

    C#写的防止SQL注入式攻击的软件 可以作为课程设计

    在IT行业中,SQL注入是一种常见的安全威胁,它允许攻击者通过输入恶意的SQL代码来操纵数据库,获取敏感信息,甚至完全控制服务器。本项目提供了一个用C#编写的软件,旨在预防这种攻击,适合用于课程设计,以帮助学生...

    【ASP.NET编程知识】ASP.NET防止SQL注入的方法示例.docx

    ASP.NET 防止 SQL 注入攻击的方法有很多,这些方法包括参数法防注入、传统的笨一点的办法、HttpModule 实现防sql注入、SqlFilter 防止 SQL 注入、validation 防止 SQL 注入等。只有通过使用这些方法,才能有效地防止...

    ASP.Net C# SQL注入 跨脚步漏洞 案例

    SQL注入是一种攻击方式,攻击者通过在输入字段中插入恶意的SQL代码,试图操纵或获取数据库中的敏感信息。在ASP.NET和C#环境中,如果你的代码没有正确地处理用户输入,就可能导致SQL注入。例如,如果你直接将用户输入...

    ASP.NET(c#)防SQL注入脚本程序 v2.0 .rar

    SQL注入是一种常见的网络安全威胁,攻击者通过输入恶意的SQL代码来操纵数据库,可能导致数据泄露、系统瘫痪甚至完全控制服务器。在本文中,我们将深入探讨SQL注入的基本原理,了解其危害,以及ASP.NET(C#)中如何...

    c# sqlserver2008 简单的SQL注入演示

    在IT行业中,SQL注入是一种常见的安全漏洞,它允许攻击者通过输入恶意的SQL代码来操纵数据库。本示例是关于"C#与SQL Server 2008环境下如何进行简单的SQL注入演示",我们将深入探讨这一主题,理解其原理,并学习如何...

    防止SQL注入式攻击

    SQL注入式攻击是一种常见的网络安全威胁,它利用了不安全的SQL语句设计,使得恶意用户可以通过输入特定的数据来操纵数据库。这种攻击方式可能导致数据泄露、数据篡改甚至整个系统的瘫痪。以下是一些关于防止SQL注入...

    通用防SQL注入漏洞程序(Global.asax方式)_aspx开发教程.rar

    在ASP.NET开发中,SQL注入是一种常见的安全威胁,它允许攻击者通过输入恶意SQL代码来操纵数据库,获取、修改或删除敏感数据。本教程将详细讲解如何使用Global.asax文件来实现一个通用的防SQL注入策略,以保护ASP.NET...

    C#参数化查询,避免SQL注入

    为了解决这个问题,C#提供了一种有效的方法——参数化查询,这是一种安全且高效的方式来执行数据库操作,能有效地防止SQL注入攻击。 参数化查询的核心思想是将SQL语句和实际的值分离,通过占位符(如`?`或`@param`...

    ASP.NET防SQL注入脚本程序

    SQL注入是黑客利用输入字段向应用程序的SQL查询中插入恶意代码,从而控制或操纵数据库的一种手段。例如,如果一个登录页面没有正确验证用户输入,黑客可能会输入SQL命令而非用户名和密码,从而获取未经授权的访问...

    简单的asp.net登陆有一定的sql防注入功能

    标题提到的"简单的asp.net登陆有一定的sql防注入功能",意味着这个示例将展示一种基础的方法来防止SQL注入攻击。在ASP.NET中,通常我们会使用参数化查询或存储过程来避免这种情况,但在这个例子中,它可能通过一个...

Global site tag (gtag.js) - Google Analytics