五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

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

發(fā)布日期:2022-01-10 12:22 | 文章來源:gibhub
1.什么是SQL注入
所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務器執(zhí)行惡意的SQL命令。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動態(tài)SQL命令,或作為存儲過程的輸入?yún)?shù),這類表單特別容易受到SQL注入式攻擊。 2.怎么進行SQL注入
關于怎么進行SQL注入,網(wǎng)上已經(jīng)有很多文章詳細介紹過了,可以參考博友滴答的雨的博文 《SQL注入攻防入門詳解》,親測有效。當執(zhí)行完文中的5、6、7三步的時候,你會發(fā)現(xiàn)服務器上的安全保護措施都已是浮云,服務器也因此變成了名副其實的“肉機”。下面附上一張我在本機執(zhí)行完文中描述的腳本后的效果截圖(Win8 x64 操作系統(tǒng)):

image
微軟的“不禁止即允許(Not forbidden is allow)”的做法使得操作系統(tǒng)像是服務器所穿的鏤空禮物一樣,美觀但卻有很多“漏洞”。好了,現(xiàn)在此小黑已經(jīng)擁有了服務器的管理員權限,很顯然元芳怎么看已經(jīng)不重要了。 3.如何防止SQL注入的發(fā)生
滴答的雨已經(jīng)在博文詳細闡述了SQL Server數(shù)據(jù)庫如何進行防注入的操作,這里不再贅述。這一篇我主要說一下對于一個使用拼接SQL進行查詢操作的Web應用,怎么進行防注入操作。
先說一些前提,為什么我們要使用拼接SQL的方式進行查詢?偷懶唄。這在開發(fā)過程中,看似省去了編寫參數(shù)化部分的代碼量,節(jié)省了時間和精力。但這樣做的結(jié)果就是應用的安全性大打折扣,而且拼SQL方式創(chuàng)建的應用,后期的維護難度也很大。SQL參數(shù)化查詢是最簡單有效的避免SQL注入的解決方案,目前主流的ORM框架(MyBatis.NET/NHibernate/EntityFramework)都內(nèi)置支持并且推薦使用這種方式進行持久層封裝。 然而有數(shù)據(jù)庫不支持參數(shù)化查詢怎么辦?是的,你沒有看錯,確實有這樣的數(shù)據(jù)庫存在。吐個槽先,個人認為,一切不支持參數(shù)化查詢的數(shù)據(jù)庫都是在“耍流氓”,這種天然的缺陷會讓小黑們肆無忌憚地去“非禮”服務器,至少是數(shù)據(jù)庫本身。在這樣的情況下,我覺得其他功能做得再好也只能算是花拳繡腿,連最基本的數(shù)據(jù)都保護不了,那不等同于將勞動成果拱手讓人。按照存在即合理的邏輯,我們暫且認為它是合理的。 來說說我目前的做法,基于上述數(shù)據(jù)庫創(chuàng)建的Web應用,拼接SQL操作已經(jīng)滲透到站點的每個頁面、每個用戶控件,所以我采用的方式是請求過濾。
下面是防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:數(shù)據(jù)庫路徑
 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>****以上信息已記錄至日志數(shù)據(jù)庫****");
 76:    else
 77:     System.Web.HttpContext.Current.Response.Write("<br>日志數(shù)據(jù)庫出錯");
 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:   }
國內(nèi)礦機海外托管產(chǎn)品方案

-->

版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

客服
熱線

400-630-3752
7*24小時客服服務熱線

關注
微信

關注官方微信