校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > ASP.NET過濾類SqlFilter,防止SQL注入 原創

ASP.NET過濾類SqlFilter,防止SQL注入 原創

熱門標簽:遂寧市地圖標注app 塔城代理外呼系統 400電話辦理哪家性價比高 地圖標注專業團隊 代理接電話機器人如何取消 地圖定位圖標標注 天心智能電銷機器人 濮陽外呼電銷系統怎么樣 地圖標注的公司有哪些

什么是SQL注入?

我理解的sql注入就是一些人可以通過惡意的參數輸入,讓后臺執行這段SQL,然后達到獲取數據或者破壞數據庫的目的!
舉個簡單的查詢例子,后臺sql是拼接的:select * from Test where name='+參數傳遞+';前臺頁面要求輸入name,那么黑客可以輸入: ';DROP TABLE Test;--   不要小瞧這一段SQL代碼:
select * from Test where name=' ';DROP TABLE Test;--';在SQL中是正確的,可執行的,但是執行后整個Test表都刪除了,網站崩潰!

最好的解決方法

最好的辦法就是不寫拼接SQL,改用參數化SQL,推薦新項目使用。這里不做介紹,感興趣的朋友可以自行搜索一下,本文介紹的方法適合老項目,就是沒有使用參數化SQL開發的程序。

使用過濾函數來過濾

將SQL一些危險的關鍵字,還有注釋百分號以及分號這些根本在我們正常寫代碼的時候根本不會出現的字符都過濾掉,這樣能最大限度的保證SQL執行是安全的,代碼如下:

public class SqlFilter
{
  public static void Filter()
  {
    string fileter_sql = "execute,exec,select,insert,update,delete,create,drop,alter,exists,table,sysobjects,truncate,union,and,order,xor,or,mid,cast,where,asc,desc,xp_cmdshell,join,declare,nvarchar,varchar,char,sp_oacreate,wscript.shell,xp_regwrite,',%,;,--";
    try
    {
      // -----------------------防 Post 注入-----------------------
      if (HttpContext.Current.Request.Form != null)
      {
        PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
        //把 Form 屬性改為可讀寫
        isreadonly.SetValue(HttpContext.Current.Request.Form, false, null);

        for (int k = 0; k  System.Web.HttpContext.Current.Request.Form.Count; k++)
        {
          string getsqlkey = HttpContext.Current.Request.Form.Keys[k];
          string sqlstr = HttpContext.Current.Request.Form[getsqlkey];
          string[] replace_sqls = fileter_sql.Split(',');
          foreach (string replace_sql in replace_sqls)
          {
            sqlstr = Regex.Replace(sqlstr, replace_sql, "", RegexOptions.IgnoreCase);
          }
          HttpContext.Current.Request.Form[getsqlkey] = sqlstr;
        }
      }


      // -----------------------防 GET 注入-----------------------
      if (HttpContext.Current.Request.QueryString != null)
      {
        PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
        //把 QueryString 屬性改為可讀寫
        isreadonly.SetValue(HttpContext.Current.Request.QueryString, false, null);

        for (int k = 0; k  System.Web.HttpContext.Current.Request.QueryString.Count; k++)
        {
          string getsqlkey = HttpContext.Current.Request.QueryString.Keys[k];
          string sqlstr = HttpContext.Current.Request.QueryString[getsqlkey];
          string[] replace_sqls = fileter_sql.Split(',');
          foreach (string replace_sql in replace_sqls)
          {
            sqlstr = Regex.Replace(sqlstr, replace_sql, "", RegexOptions.IgnoreCase);
          }
          HttpContext.Current.Request.QueryString[getsqlkey] = sqlstr;
        }
      }


      // -----------------------防 Cookies 注入-----------------------
      if (HttpContext.Current.Request.Cookies != null)
      {
        PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
        //把 Cookies 屬性改為可讀寫
        isreadonly.SetValue(HttpContext.Current.Request.Cookies, false, null);

        for (int k = 0; k  System.Web.HttpContext.Current.Request.Cookies.Count; k++)
        {
          string getsqlkey = HttpContext.Current.Request.Cookies.Keys[k];
          string sqlstr = HttpContext.Current.Request.Cookies[getsqlkey].Value;
          string[] replace_sqls = fileter_sql.Split(',');
          foreach (string replace_sql in replace_sqls)
          {
            sqlstr = Regex.Replace(sqlstr, replace_sql, "", RegexOptions.IgnoreCase);
          }
          HttpContext.Current.Request.Cookies[getsqlkey].Value = sqlstr;
        }
      }
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
    }

  }

}
您可能感興趣的文章:
  • c#.net全站防止SQL注入類的代碼
  • asp.net 防止SQL注入攻擊
  • asp.net利用HttpModule實現防sql注入
  • asp.net(C#)防sql注入組件的實現代碼
  • asp.net下檢測SQL注入式攻擊代碼
  • asp.net 預防SQL注入攻擊之我見
  • ASP.NET防范SQL注入式攻擊的方法
  • ASP.NET防止SQL注入的方法示例
  • 深入淺析.NET應用程序SQL注入
  • .Net防sql注入的幾種方法

標簽:麗江 宜春 吉林 汕頭 婁底 本溪 河南 重慶

巨人網絡通訊聲明:本文標題《ASP.NET過濾類SqlFilter,防止SQL注入 原創》,本文關鍵詞  ASP.NET,過濾,類,SqlFilter,防止,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ASP.NET過濾類SqlFilter,防止SQL注入 原創》相關的同類信息!
  • 本頁收集關于ASP.NET過濾類SqlFilter,防止SQL注入 原創的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 三亚市| 桂东县| 芜湖县| 政和县| 和硕县| 纳雍县| 吴江市| 颍上县| 增城市| 金溪县| 炎陵县| 龙岩市| 建阳市| 河池市| 宁波市| 泉州市| 延安市| 沅陵县| 白水县| 永川市| 珲春市| 苏州市| 阿拉善右旗| 达拉特旗| 永新县| 陆河县| 利辛县| 延吉市| 文山县| 沅陵县| 玛多县| 宝丰县| 新源县| 历史| 昆明市| 武川县| 吕梁市| 象州县| 中山市| 黄平县| 宁武县|