欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 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注入的解決方法的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    国产精品无码网站| 91.麻豆视频| 国产欧美精品一区二区色综合| 五月天亚洲婷婷| 岛国av免费观看| 欧美视频第二页| 亚洲图片自拍偷拍| 扒开伸进免费视频| 欧美一区二区三区精品| 图片区小说区区亚洲影院| 亚洲av成人精品一区二区三区| 欧美区视频在线观看| 亚洲成人在线网站| 日本免费福利视频| 欧美大片日本大片免费观看| 老司机精品视频在线| 在线不卡av电影| 久久久亚洲国产美女国产盗摄 | 免费成人在线视频观看| 日本黄色网址大全| 久久综合成人精品亚洲另类欧美| 国产在线观看一区二区| 国产喷水在线观看| 最新欧美精品一区二区三区| 99re视频精品| 欧美久久久久久久久久| 日韩成人午夜电影| 国产99在线 | 亚洲| 国产精品美女久久久久久久| 99国内精品久久| 91精品国产综合久久精品图片| 日本不卡高清视频| 久久精品色妇熟妇丰满人妻| 国产精品灌醉下药二区| 久久黄色一级视频| 日韩欧美激情在线| 国产成人综合自拍| 欧美在线观看视频一区二区| 日韩一区精品视频| 青青青视频在线播放| 专区另类欧美日韩| 久久久午夜精品福利内容| 久久色中文字幕| av网站一区二区三区| 这里只有精品视频在线观看| 韩国v欧美v亚洲v日本v| 一本久久a久久免费精品不卡| 亚洲成人免费在线观看| avhd101老司机| 亚洲精品精品亚洲| 国产精品久久久久无码av色戒| 国产精品第13页| 婷婷五月精品中文字幕| 国产天堂亚洲国产碰碰| 久草福利在线观看| 久久综合久久综合久久| 91麻豆精品在线观看| 精品久久久久久久久久久久久久久 | 久久久三级国产网站| 99视频在线精品| 日韩久久久精品| 成人高清免费观看| 日韩三级av在线播放| 成人黄色免费短视频| 日韩一卡二卡三卡四卡| 成人av网址在线观看| 日韩欧美国产一区在线观看| av影院午夜一区| 精品国产人成亚洲区| 无码国产精品一区二区高潮| www久久久久| 91超薄肉色丝袜交足高跟凉鞋| 国产亚洲污的网站| 日本一区二区在线免费观看| 国产精品国产三级国产普通话蜜臀 | xxxx黄色片| 综合电影一区二区三区| 国产精品20p| 午夜天堂影视香蕉久久| 放荡的美妇在线播放| 看国产成人h片视频| 精品视频免费看| 成人一区二区三区中文字幕| 欧美变态口味重另类| 日韩黄色一区二区| 成人免费一区二区三区在线观看| 色哟哟精品观看| 亚洲国产精品久久艾草纯爱| 成人免费毛片东京热| 激情伊人五月天久久综合| 欧美精品日韩一本| 96av麻豆蜜桃一区二区| 国产女主播视频一区二区| 李宗瑞91在线正在播放| 亚洲国产精品一区二区www| 色综合久久久久久久| 国产麻豆精品95视频| 日韩欧美色综合网站| 18禁一区二区三区| 亚洲精品水蜜桃| 韩国一级黄色录像| 韩国av一区二区| 精品国产一区二区三区不卡| 丰满岳乱妇一区二区 | 黄色a级片在线观看| 国内成+人亚洲+欧美+综合在线| 91精品国产色综合久久不卡电影| 日本成人在线免费观看| 亚洲少妇中出一区| 91视频青青草| 国产成人8x视频一区二区 | 97伦伦午夜电影理伦片| 午夜成人免费视频| 在线91免费看| 欧美xxxxx少妇| 亚洲大片免费看| 欧美日韩在线免费视频| 真实乱偷全部视频| 亚洲精品国久久99热| 欧美在线看片a免费观看| 一级黄色免费毛片| 一区二区三区在线影院| 在线免费观看日韩欧美| 91丨porny丨在线| 亚洲精品国产无天堂网2021| 日本乱码高清不卡字幕| 99视频在线精品| 亚洲永久精品大片| 欧美年轻男男videosbes| 稀缺呦国内精品呦| 图片区小说区国产精品视频| 91麻豆精品国产综合久久久久久| 中文字幕乱视频| 男男成人高潮片免费网站| 精品日韩一区二区三区 | 国产亚洲综合性久久久影院| 精品熟妇无码av免费久久| 国产精品正在播放| 国产精品美女久久久久久久网站| 日本老熟俱乐部h0930| 91一区一区三区| 亚洲大片精品永久免费| 日韩午夜精品视频| 日本黄色小视频在线观看| 国产成人在线视频免费播放| 亚洲欧洲精品一区二区三区| 欧美在线观看视频一区二区 | 肉色超薄丝袜脚交69xx图片| 成人黄色777网| 亚洲人成精品久久久久久| 欧美日韩国产电影| 精品人妻一区二区三区视频| 国产在线乱码一区二区三区| 国产精品传媒在线| 欧美日韩另类一区| 亚洲一级中文字幕| 国产经典欧美精品| 一区二区欧美在线观看| 欧美一二三区在线观看| 国产馆在线观看| 91视视频在线观看入口直接观看www | 青青草97国产精品免费观看 | 久久在线免费观看| 好吊日在线视频| 熟妇高潮一区二区| 精品在线免费观看| 亚洲人成小说网站色在线| 8x8x8国产精品| 一级片久久久久| 一级黄色免费毛片| 久久66热re国产| 亚洲人成小说网站色在线| 日韩一区二区三区视频在线观看| 女教师淫辱の教室蜜臀av软件| 91免费观看视频在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 中文字幕在线观看网址| 国产suv一区二区三区88区| 亚洲一二三专区| 国产亚洲va综合人人澡精品| 欧美午夜电影网| 在线视频第一页| 99国产精品免费视频| 国产一区二区三区在线观看精品| 亚洲欧美经典视频| 精品国产乱码久久| 在线国产电影不卡| 91资源在线播放| 欧美图片自拍偷拍| 国产成人免费视频网站| 丝瓜av网站精品一区二区| 国产精品久久久久久久久晋中| 91精品国产色综合久久| 一区二区国产精品精华液| 小毛片在线观看| 9i看片成人免费高清| 精品一区二区免费在线观看| 亚洲一二三区在线观看| 欧美激情一区二区在线| 欧美一级在线视频|