激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語言 - ASP.NET教程 - .Net防sql注入的幾種方法

.Net防sql注入的幾種方法

2020-06-16 12:21willingtolove ASP.NET教程

這篇文章主要給大家總結(jié)介紹了關(guān)于.Net防sql注入的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.Net具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

防sql注入的常用方法:

1、服務(wù)端對(duì)前端傳過來的參數(shù)值進(jìn)行類型驗(yàn)證;

2、服務(wù)端執(zhí)行sql,使用參數(shù)化傳值,而不要使用sql字符串拼接;

3、服務(wù)端對(duì)前端傳過來的數(shù)據(jù)進(jìn)行sql關(guān)鍵詞過來與檢測;

著重記錄下服務(wù)端進(jìn)行sql關(guān)鍵詞檢測:

1、sql關(guān)鍵詞檢測類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
public class SqlInjectHelper:System.Web.UI.Page
 {
  private static string StrKeyWord = "select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec|master|net local group administrators|net user|or|and";
  private static string StrSymbol = ";|(|)|[|]|{|}|%|@|*|'|!";
 
  private HttpRequest request;
  public SqlInjectHelper(System.Web.HttpRequest _request)
  {
   this.request = _request;
  }
  public bool CheckSqlInject()
  {
   return CheckRequestQuery() || CheckRequestForm();
  }
 
  ///<summary>
  ///檢查URL中是否包含Sql注入
  /// <param name="_request">當(dāng)前HttpRequest對(duì)象</param>
  /// <returns>如果包含sql注入關(guān)鍵字,返回:true;否則返回:false</returns>
  ///</summary>
  public bool CheckRequestQuery()
  {
   if (request.QueryString.Count > 0)
   {
    foreach (string sqlParam in this.request.QueryString)
    {
     if (sqlParam == "__VIEWSTATE")
      continue;
     if (sqlParam == "__EVENTVALIDATION")
      continue;
     if (CheckKeyWord(request.QueryString[sqlParam].ToLower()))
     {
      return true;
     }
    }
   }
   return false;
  }
  ///<summary>
  ///檢查提交的表單中是否包含Sql注入關(guān)鍵字
  /// <param name="_request">當(dāng)前HttpRequest對(duì)象</param>
  /// <returns>如果包含sql注入關(guān)鍵字,返回:true;否則返回:false</returns>
  ///</summary>
  public bool CheckRequestForm()
  {
   if (request.Form.Count > 0)
   {
    foreach (string sqlParam in this.request.Form)
    {
     if (sqlParam == "__VIEWSTATE")
      continue;
     if (sqlParam == "__EVENTVALIDATION")
      continue;
     if (CheckKeyWord(request.Form[sqlParam]))
     {
      return true;
     }
    }
   }
   return false;
  }
  ///<summary>
  ///檢查字符串中是否包含Sql注入關(guān)鍵字
  /// <param name="_key">被檢查的字符串</param>
  /// <returns>如果包含sql注入關(guān)鍵字,返回:true;否則返回:false</returns>
  ///</summary>
  private static bool CheckKeyWord(string _key)
  {
   string[] pattenKeyWord = StrKeyWord.Split('|');
   string[] pattenSymbol = StrSymbol.Split('|');
   foreach (string sqlParam in pattenKeyWord)
   {
    if (_key.Contains(sqlParam + " ") || _key.Contains(" " + sqlParam))
    {
     return true;
    }
   }
   foreach (string sqlParam in pattenSymbol)
   {
    if (_key.Contains(sqlParam))
    {
     return true;
    }
   }
   return false;
  }
 
 }

SqlInjectHelper類中,對(duì)request的query參數(shù)和form參數(shù)進(jìn)行的檢測,沒有對(duì)cookie的檢測,如有需要,可自行加上;

2、SqlInjectHelper在哪調(diào)用呢?

1)、如果想對(duì)整個(gè)web站點(diǎn)的所有請(qǐng)求都做sql關(guān)鍵字檢測,那就在Global.asax 的 Application_BeginRequest方法中調(diào)用;

?
1
2
3
4
5
6
7
8
9
10
11
protected void Application_BeginRequest(object sender, EventArgs e)
  {
   SqlInjectHelper myCheck = new SqlInjectHelper(Request);
   bool result = myCheck.CheckSqlInject();
   if (result)
   {
    Response.ContentType = "text/plain";
    Response.Write("您提交的數(shù)據(jù)有惡意字符!");
    Response.End();
   }
  }

2)、如果只需對(duì)某個(gè)接口文件的接口進(jìn)行sql關(guān)鍵字檢測,那只需在該文件開始處調(diào)用SqlInjectHelper類即可;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Handler1 : IHttpHandler
 {
  public void ProcessRequest(HttpContext context)
  {
   SqlInjectHelper myCheck = new SqlInjectHelper(context.Request);
   bool result = myCheck.CheckSqlInject();
   context.Response.ContentType = "text/plain";
   context.Response.Write(result?"您提交的數(shù)據(jù)有惡意字符!":"");
   context.Response.StatusCode = result ? 500 : 200;
  }
  public bool IsReusable
  {
   get
   {
    return false;
   }
  }
 }

上面的代碼就是對(duì)某個(gè)一般處理程序(ashx)添加了sql關(guān)鍵字檢測;

3、補(bǔ)充說明:asp.net中的 __VIEWSTATE、__EVENTVALIDATION、

  在sql關(guān)鍵字檢測方法中,排除了__VIEWSTATE、__EVENTVALIDATION這兩個(gè)參數(shù);

1)、__VIEWSTATE

  ViewState是ASP.NET中用來保存WEB控件回傳時(shí)狀態(tài)值一種機(jī)制。在WEB窗體(FORM)的設(shè)置為runat="server",這個(gè)窗體(FORM)會(huì)被附加一個(gè)隱藏的屬性_VIEWSTATE。_VIEWSTATE中存放了所有控件在ViewState中的狀態(tài)值。

ViewState是類Control中的一個(gè)域,其他所有控件通過繼承Control來獲得了ViewState功能。它的類型是system.Web.UI.StateBag,一個(gè)名稱/值的對(duì)象集合。

  當(dāng)請(qǐng)求某個(gè)頁面時(shí),ASP.NET把所有控件的狀態(tài)序列化成一個(gè)字符串,然后做為窗體的隱藏屬性送到客戶端。當(dāng)客戶端把頁面回傳時(shí),ASP.NET分析回傳的窗體屬性,并賦給控件對(duì)應(yīng)的值;

2)、__EVENTVALIDATION

  __EVENTVALIDATION只是用來驗(yàn)證事件是否從合法的頁面發(fā)送,只是一個(gè)數(shù)字簽名,所以一般很短。

“id”屬性為“__EVENTVALIDATION”的隱藏字段是ASP.NET 2.0的新增的安全措施。該功能可以阻止由潛在的惡意用戶從瀏覽器端發(fā)送的未經(jīng)授權(quán)的請(qǐng)求.;

4、sql關(guān)鍵詞檢測的另一個(gè)版本:該版本將所有危險(xiǎn)字符都放在了一個(gè)正則表達(dá)式中;

該類不僅檢測了sql常用關(guān)鍵字還有xss攻擊的常用關(guān)鍵字

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class SafeHelper
 {
  private const string StrRegex = @"<[^>]+?style=[\w]+?:expression\(|\b(alert|confirm|prompt)\b|^\+/v(8|9)|<[^>]*?=[^>]*?&#[^>]*?>|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)";
  public static bool PostData()
  {
   bool result = false;
   for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++)
   {
    result = CheckData(HttpContext.Current.Request.Form[i].ToString());
    if (result)
    {
     break;
    }
   }
   return result;
  }
 
  public static bool GetData()
  {
   bool result = false;
   for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)
   {
    result = CheckData(HttpContext.Current.Request.QueryString[i].ToString());
    if (result)
    {
     break;
    }
   }
   return result;
  }
  public static bool CookieData()
  {
   bool result = false;
   for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
   {
    result = CheckData(HttpContext.Current.Request.Cookies[i].Value.ToLower());
    if (result)
    {
     break;
    }
   }
   return result;
 
  }
  public static bool referer()
  {
   bool result = false;
   return result = CheckData(HttpContext.Current.Request.UrlReferrer.ToString());
  }
  public static bool CheckData(string inputData)
  {
   if (Regex.IsMatch(inputData, StrRegex))
   {
    return true;
   }
   else
   {
    return false;
   }
  }
 }

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)服務(wù)器之家的支持。

原文鏈接:https://www.cnblogs.com/willingtolove/p/11069969.html

延伸 · 閱讀

精彩推薦
1027
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 高清一区二区在线观看 | 羞羞视频.www在线观看 | 免费在线一级毛片 | av免费不卡国产观看 | 毛片免费看的 | 操操操日日日干干干 | 国产精品91久久久 | 成人男女啪啪免费观看网站四虎 | 欧美黄色大片免费观看 | 中国国语毛片免费观看视频 | 亚洲性爰| 亚洲第一色婷婷 | 国产成人77亚洲精品www | 日韩在线视频观看免费 | 日韩av一区二区三区在线观看 | 免费看h网站 | 日韩毛片免费观看 | 国产精品美女一区二区 | 国产精品久久久久久久午夜片 | av免费在线播放 | 欧美日韩亚洲成人 | 国产精品一区网站 | 国产精品av久久久久久无 | 九九热在线精品视频 | 4399一级成人毛片 | 国产午夜亚洲精品理论片大丰影院 | 免费观看一级黄色片 | 黑人一级片 | 久久久www成人免费精品 | 欧美a级一区二区 | 看全色黄大色黄大片女图片 | 欧美视频一区二区三区在线观看 | 国产乱淫a∨片免费观看 | 蜜桃久久一区二区三区 | 涩涩屋av| 久久精品日产第一区二区三区 | 99久久婷婷国产综合精品青牛牛 | 99国产精品欲a | 日日综合| 日韩欧美视频一区二区三区 | 91精品久久久久久久 |