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.comm

      {

      /**//// < 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.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 = "exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare ";

      else

      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;

      }

      #endregion

      }

      }

     

     

  • 回顶部
技术支持:致胜网络
  • 首页

  • 一键拨号

  • 网站开发

  • 软件开发