婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > T-SQL篇如何防止SQL注入的解決方法

T-SQL篇如何防止SQL注入的解決方法

熱門標簽:重慶防封電銷機器人供應商 北京辦理400電話多少 山西語音外呼系統價格 威海智能語音外呼系統 400電話申請需要開戶費嗎 溫州語音外呼系統代理 西安青牛防封電銷卡 智能語音外呼系統哪個牌子好 南京電銷外呼系統運營商
1.什么是SQL注入
所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或作為存儲過程的輸入參數,這類表單特別容易受到SQL注入式攻擊。

2.怎么進行SQL注入
關于怎么進行SQL注入,網上已經有很多文章詳細介紹過了,可以參考博友滴答的雨的博文 《SQL注入攻防入門詳解》,親測有效。當執行完文中的5、6、7三步的時候,你會發現服務器上的安全保護措施都已是浮云,服務器也因此變成了名副其實的“肉機”。下面附上一張我在本機執行完文中描述的腳本后的效果截圖(Win8 x64 操作系統):


微軟的“不禁止即允許(Not forbidden is allow)”的做法使得操作系統像是服務器所穿的鏤空禮物一樣,美觀但卻有很多“漏洞”。好了,現在此小黑已經擁有了服務器的管理員權限,很顯然元芳怎么看已經不重要了。

3.如何防止SQL注入的發生
滴答的雨已經在博文詳細闡述了SQL Server數據庫如何進行防注入的操作,這里不再贅述。這一篇我主要說一下對于一個使用拼接SQL進行查詢操作的Web應用,怎么進行防注入操作。
先說一些前提,為什么我們要使用拼接SQL的方式進行查詢?偷懶唄。這在開發過程中,看似省去了編寫參數化部分的代碼量,節省了時間和精力。但這樣做的結果就是應用的安全性大打折扣,而且拼SQL方式創建的應用,后期的維護難度也很大。SQL參數化查詢是最簡單有效的避免SQL注入的解決方案,目前主流的ORM框架(MyBatis.NET/NHibernate/EntityFramework)都內置支持并且推薦使用這種方式進行持久層封裝。

然而有數據庫不支持參數化查詢怎么辦?是的,你沒有看錯,確實有這樣的數據庫存在。吐個槽先,個人認為,一切不支持參數化查詢的數據庫都是在“耍流氓”,這種天然的缺陷會讓小黑們肆無忌憚地去“非禮”服務器,至少是數據庫本身。在這樣的情況下,我覺得其他功能做得再好也只能算是花拳繡腿,連最基本的數據都保護不了,那不等同于將勞動成果拱手讓人。按照存在即合理的邏輯,我們暫且認為它是合理的。

來說說我目前的做法,基于上述數據庫創建的Web應用,拼接SQL操作已經滲透到站點的每個頁面、每個用戶控件,所以我采用的方式是請求過濾。
下面是防SQL注入的操作類:

 1: /// summary>
 2:  ///SqlInject 的摘要說明
 3:  /// /summary>
 4:  public class SqlInject : System.Web.UI.Page
 5:  {
 6:   //檢測到注入后的處理方式: 0:僅警告;1:警告+記錄;2:警告+自定義錯誤頁面;3:警告+記錄+自定義錯誤頁面
 7:   private const int _type = 0;
 8:   private const string errRedirectPage = "/err.aspx";
 9:  
 10:   //如果記錄注入信息,那么請設置:errMDBpath:數據庫路徑
 11:   private const string errMDBpath = "/SqlInject.mdb";
 12:  
 13:  
 14:   //過濾特征字符
 15:   //過濾特征字符
 16:   private static string StrKeyWord = ConfigurationManager.AppSettings["SqlKeyWord"]; //@"select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec|master|net local group administrators|net user|or|and";
 17:   private static string StrRegex = ConfigurationManager.AppSettings["SqlRegex"];  //@";|/|(|)|[|]|{|}|%|@|*|'|!"; // 原始過濾條件:【-|;|,|/|(|)|[|]|{|}|%|@|*|'|!】
 18:  
 19:   private HttpRequest request;
 20:   public SqlInject(System.Web.HttpRequest _request)
 21:   {
 22:    this.request = _request;
 23:   }
 24:   ///summary>
 25:   ///檢測SQL注入及記錄、顯示出錯信息
 26:   ////summary>
 27:   public void CheckSqlInject()
 28:   {
 29:    bool isInject = false;
 30:    if (CheckRequestQuery() || CheckRequestForm())
 31:    {
 32:     isInject = true;
 33:    }
 34:    else
 35:    {
 36:     return;
 37:    }
 38:  
 39:    switch (_type)
 40:    {
 41:     case 0:
 42:      ShowErr();
 43:      break;
 44:     case 1:
 45:      ShowErr();
 46:      SaveToMdb();
 47:      break;
 48:     case 2:
 49:      ShowErr();
 50:      string temp;
 51:      System.Web.HttpContext.Current.Response.Write("script>setTimeout(\"" + "location.href='" + errRedirectPage + "'" + "\",5000)/script>");
 52:      break;
 53:     case 3:
 54:      ShowErr();
 55:      SaveToMdb();
 56:      System.Web.HttpContext.Current.Response.Write("script>setTimeout(\"" + "location.href='" + errRedirectPage + "'" + "\",5000)/script>");
 57:      break;
 58:     default:
 59:      break;
 60:    }
 61:    System.Web.HttpContext.Current.Response.End();
 62:  
 63:   }
 64:   private void SaveToMdb()
 65:   {
 66:    OleDbConnection conn = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Server.MapPath(errMDBpath));
 67:    conn.Open();
 68:    OleDbCommand cmd = conn.CreateCommand();
 69:  
 70:    cmd.CommandText = "insert into [Record] (sIP,sDate,sPath) values ('" +
 71:        request.ServerVariables["REMOTE_ADDR"].ToString() + "','" +
 72:        DateTime.Now + "','" + request.ServerVariables["URL"].ToLower() + RelaceSingleQuotes(request.QueryString.ToString()) + "')";
 73:    int code = cmd.ExecuteNonQuery();
 74:    if (code == 1)
 75:     System.Web.HttpContext.Current.Response.Write("br>****以上信息已記錄至日志數據庫****");
 76:    else
 77:     System.Web.HttpContext.Current.Response.Write("br>日志數據庫出錯");
 78:    conn.Close();
 79:  
 80:   }
 81:   private string RelaceSingleQuotes(string _url)
 82:   {
 83:    string URL = _url.Replace("'", "單引號");
 84:    return URL;
 85:   }
 86:   private void ShowErr()
 87:   {
 88:    //string msg = @"font color=red>請不要嘗試未授權之入侵檢測!/font>" + @"br>br>";
 89:    //msg += @"操作IP:" + request.ServerVariables["REMOTE_ADDR"] + @"br>";
 90:    //msg += @"操作時間:" + DateTime.Now + @"br>";
 91:    //msg += @"頁面:" + request.ServerVariables["URL"].ToLower() + request.QueryString.ToString() + @"br>";
 92:    //msg += @"a href='#' onclick='javascript:window.close()'>關閉/a>";
 93:    //System.Web.HttpContext.Current.Response.Clear();
 94:    //System.Web.HttpContext.Current.Response.Write(msg);
 95:    System.Web.HttpContext.Current.Response.Write("script>alert('請不要嘗試未授權之入侵檢測!');javascript:history.go(-1);/script>");
 96:   }
 97:   ///summary>
 98:   /// 特征字符
 99:   ////summary>
 100:   public static string KeyWord
 101:   {
 102:    get
 103:    {
 104:     return StrKeyWord;
 105:    }
 106:   }
 107:   ///summary>
 108:   /// 特征符號
 109:   ////summary>
 110:   public static string RegexString
 111:   {
 112:    get
 113:    {
 114:     return StrRegex;
 115:    }
 116:   }
 117:  
 118:   ///summary>
 119:   ///檢查字符串中是否包含Sql注入關鍵字
 120:   /// param name="_key">被檢查的字符串/param>
 121:   /// returns>如果包含注入true;否則返回false/returns>
 122:   ////summary>
 123:   private static bool CheckKeyWord(string _key)
 124:   {
 125:    string[] pattenString = StrKeyWord.Split('|');
 126:    string[] pattenRegex = StrRegex.Split('|');
 127:    foreach (string sqlParam in pattenString)
 128:    {
 129:     if (_key.Contains(sqlParam + " ") || _key.Contains(" " + sqlParam))
 130:     {
 131:      return true;
 132:     }
 133:    }
 134:    foreach (string sqlParam in pattenRegex)
 135:    {
 136:     if (_key.Contains(sqlParam))
 137:     {
 138:      return true;
 139:     }
 140:    }
 141:    return false;
 142:  
 143:   }
 144:   ///summary>
 145:   ///檢查URL中是否包含Sql注入
 146:   /// param name="_request">當前HttpRequest對象/param>
 147:   /// returns>如果包含注入true;否則返回false/returns>
 148:   ////summary>
 149:   public bool CheckRequestQuery()
 150:   {
 151:    if (request.QueryString.Count > 0)
 152:    {
 153:     foreach (string sqlParam in this.request.QueryString)
 154:     {
 155:      if (sqlParam == "__VIEWSTATE") continue;
 156:      if (sqlParam == "__EVENTVALIDATION") continue;
 157:      if (CheckKeyWord(request.QueryString[sqlParam].ToLower()))
 158:      {
 159:       return true;
 160:      }
 161:     }
 162:    }
 163:    return false;
 164:   }
 165:   ///summary>
 166:   ///檢查提交的表單中是否包含Sql注入
 167:   /// param name="_request">當前HttpRequest對象/param>
 168:   /// returns>如果包含注入true;否則返回false/returns>
 169:   ////summary>
 170:   public bool CheckRequestForm()
 171:   {
 172:    if (request.Form.Count > 0)
 173:    {
 174:     foreach (string sqlParam in this.request.Form)
 175:     {
 176:      if (sqlParam == "__VIEWSTATE") continue;
 177:      if (sqlParam == "__EVENTVALIDATION") continue;
 178:      if (CheckKeyWord(request.Form[sqlParam]))
 179:      {
 180:       return true;
 181:      }
 182:     }
 183:    }
 184:    return false;
 185:   }
 186:  }

過濾類是在某前輩的作品基礎上改的,很抱歉我已經找不到最原始的出處了。需要在Web.Config中添加防SQL注入的特征字符集:

復制代碼 代碼如下:

!--防SQL注入時的特征字符集-->
add key="SqlKeyWord" value="select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec|master|net local group administrators|net user|or|and"/>
add key="SqlRegex" value=";|(|)|[|]|{|}|%|@|*|'|!"/>

使用方法很簡單,在站點的Global文件中,添加 Application_BeginRequest 事件即可:
復制代碼 代碼如下:

protected void Application_BeginRequest(object sender, EventArgs e)
{
//防SQL注入代碼
SqlInject myCheck = new SqlInject(this.Request);
myCheck.CheckSqlInject();
}

ASP.NET SQL 注入免費解決方案
任何一種使用數據庫web程序(當然,也包括桌面程序)都有被SQL注入的風險。防止被SQL注入,最基本的方法是在代碼級別就要阻止這種可能,這個網上講的很多,我就不多說了。不過如果你拿到的是一個已經完工的產品,這個時候該如何解決呢?我介紹幾種對于ASP和ASP.NET有效的防止SQL注入的方案,而且是免費的。
UrlScan 3.1
UrlScan 3.1是一個安全方面的工具,微軟官方的東西。它會檢查所有IIS處理的HTTP請求。UrlScan 可以在有安全問題的HTTP請求到達應用程序之前就阻止這個請求。UrlScan 3.1 是UrlScan 2.5的一個升級版本,支持Windows Vista 和Windows Server 2008系統之上的IIS 5.1, IIS 6.0 和 IIS 7.0。

鏈接地址:http://www.iis.net/expand/UrlScan 這里還有很多非常有用的IIS擴展,可以看看。

IIS 6 SQL Injection Sanitation ISAPI Wildcard
這個ISAPI dll 也是通過檢查HTTP請求避免SQL注入。只兼容windows 2003上的 IIS 6.0。對于Windows XP 上的 IIS 5 不支持。

您可能感興趣的文章:
  • php中防止SQL注入的最佳解決方法
  • PHP開發中常見的安全問題詳解和解決方法(如Sql注入、CSRF、Xss、CC等)
  • ASP+MSSQL2000 數據庫被批量注入后的解決方法
  • MySQL Proxy(解決注入的另一思路)
  • MySQL解決SQL注入的另類方法詳解
  • SQL注入原理與解決方法代碼示例
  • 通過ibatis解決sql注入問題
  • sqlserver 數據庫被注入解決方案
  • SQL注入漏洞過程實例及解決方案
  • 實例介紹SQL注入以及如何解決

標簽:貸款群呼 河源 宜春 濟寧 黃山 中衛 新余 金昌

巨人網絡通訊聲明:本文標題《T-SQL篇如何防止SQL注入的解決方法》,本文關鍵詞  T-SQL,篇,如何,防止,SQL,注入,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《T-SQL篇如何防止SQL注入的解決方法》相關的同類信息!
  • 本頁收集關于T-SQL篇如何防止SQL注入的解決方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    美女免费视频一区二区| 欧美图区在线视频| 欧美日韩亚洲综合| 国产亚洲精品bt天堂精选| 亚洲欧美一区二区三区极速播放 | 不卡的电影网站| 欧美午夜理伦三级在线观看| 久久新电视剧免费观看| 亚洲小说春色综合另类电影| 成人免费毛片片v| 91精品国产一区二区人妖| 中文成人av在线| 国产乱码精品1区2区3区| 欧美精品亚洲一区二区在线播放| 日韩伦理av电影| 国产成人精品三级麻豆| 精品国精品国产| 蜜桃91丨九色丨蝌蚪91桃色| 欧美三级视频在线播放| 亚洲一区在线电影| 在线观看视频一区| 一区二区三区四区五区视频在线观看| 国产成人亚洲精品青草天美 | 国产一区二区免费视频| 欧美日韩国产另类一区| 亚洲综合精品自拍| 在线观看日韩精品| 亚洲综合激情另类小说区| 91一区二区在线观看| 国产精品素人一区二区| 欧美不卡一区二区三区四区| 亚洲成年人网站在线观看| 欧美性生交片4| 亚洲国产综合在线| 91精品在线免费| 日本不卡一区二区三区| 欧美不卡视频一区| 精品午夜久久福利影院| 久久综合999| 风间由美一区二区av101| 国产精品久久二区二区| 99久久伊人精品| 亚洲午夜私人影院| 日韩一级欧美一级| 九一九一国产精品| 中日韩免费视频中文字幕| 播五月开心婷婷综合| 国产精品久久久久影院色老大| 色系网站成人免费| 日韩**一区毛片| 国产拍欧美日韩视频二区| 一本色道久久综合狠狠躁的推荐 | 国产成人a级片| 中文字幕精品一区二区三区精品| av亚洲精华国产精华| 亚洲精品精品亚洲| 欧美一区二区成人6969| 成人av电影在线网| 亚洲成a人v欧美综合天堂| 欧美成人精品福利| 91麻豆视频网站| 青青国产91久久久久久 | 久久精品一级爱片| 在线观看日韩毛片| 国产一区二区三区黄视频| 国产精品毛片久久久久久| 欧美日韩在线一区二区| 国内成人自拍视频| 亚洲午夜电影在线| 国产亚洲欧美激情| 欧美精选在线播放| 成人网在线免费视频| 亚洲国产一区二区在线播放| 国产欧美日韩综合精品一区二区| 欧美视频在线播放| 不卡的av在线播放| 久久精品国产99久久6| 亚洲黄色免费电影| 国产日韩综合av| 日韩精品一区二| 欧美视频一区二区三区在线观看| 成人听书哪个软件好| 美女国产一区二区三区| 伊人色综合久久天天人手人婷| 国产亚洲精品免费| 日韩精品专区在线| 在线成人小视频| 欧美性一区二区| 91香蕉国产在线观看软件| 国产成人精品亚洲午夜麻豆| 日韩在线观看一区二区| 亚洲综合无码一区二区| 久久99蜜桃精品| 亚洲大片在线观看| 亚洲免费在线电影| 国产精品二三区| 欧美激情在线观看视频免费| 久久久久国产精品免费免费搜索| 欧美性做爰猛烈叫床潮| 在线看国产一区| 日本二三区不卡| 色婷婷综合久色| 色婷婷av一区二区三区软件| 97久久精品人人爽人人爽蜜臀| 国产91精品露脸国语对白| 激情六月婷婷久久| 国产麻豆精品久久一二三| 国产乱码精品一区二区三区五月婷| 欧美aaa在线| 韩国毛片一区二区三区| 九色综合国产一区二区三区| 国产在线精品一区二区夜色| 加勒比av一区二区| 国产成人免费视频一区| 国产999精品久久久久久| 成人美女在线视频| 99精品久久久久久| 欧美性猛片aaaaaaa做受| 欧美日韩一区不卡| 日韩一区二区三区视频在线观看| 欧美电影精品一区二区| 久久久久久久综合色一本| 亚洲国产精品v| 亚洲另类春色国产| 丝袜诱惑制服诱惑色一区在线观看| 日韩综合小视频| 国产一区二区三区av电影| www.色精品| 欧美精品久久99久久在免费线| 欧美成人乱码一区二区三区| 国产女人aaa级久久久级 | 国产超碰在线一区| 91亚洲精品久久久蜜桃网站| 欧美性生活影院| 精品裸体舞一区二区三区| 国产精品高清亚洲| 亚洲国产精品久久不卡毛片| 免费久久精品视频| 99视频一区二区| 欧美日韩成人一区| 久久婷婷国产综合精品青草| 亚洲视频在线一区二区| 亚洲va国产va欧美va观看| 麻豆精品视频在线观看| 99精品一区二区三区| 在线不卡一区二区| 国产精品久久一级| 日韩电影在线观看电影| av电影在线观看完整版一区二区| 欧美高清一级片在线| 国产日韩成人精品| 天天操天天综合网| 99视频超级精品| 欧美r级电影在线观看| 亚洲综合色在线| 国产精品2024| 欧美一级精品大片| 亚洲专区一二三| 成人中文字幕在线| 欧美xxxxxxxxx| 午夜视频在线观看一区二区三区| 国产精品一卡二卡在线观看| 欧美伦理视频网站| 中文字幕一区在线观看视频| 久久电影网电视剧免费观看| 欧美性生活影院| 亚洲情趣在线观看| 粉嫩av亚洲一区二区图片| 精品久久五月天| 欧美日本在线视频| 国产精品乱人伦中文| 国产精品88av| 精品国产伦理网| 开心九九激情九九欧美日韩精美视频电影 | 一本大道久久a久久精品综合| 精品福利在线导航| 日韩av午夜在线观看| 欧美日韩国产一区二区三区地区| 中文字幕的久久| 国产黑丝在线一区二区三区| 欧美大度的电影原声| 三级在线观看一区二区| 欧美在线观看视频在线| 亚洲综合一区二区精品导航| 91丝袜美女网| 亚洲激情网站免费观看| 91麻豆国产精品久久| 综合激情成人伊人| 色综合欧美在线视频区| 亚洲女同ⅹxx女同tv| 97精品久久久久中文字幕| 中文字幕中文字幕在线一区| 99久久综合色| 亚洲少妇屁股交4| 在线视频国内自拍亚洲视频| 一区二区三区蜜桃网| 欧美日韩国产小视频在线观看| 亚洲午夜私人影院| 日韩一区二区在线看片| 国产在线精品一区二区不卡了|