【转载】防范SQL注入式攻击
生活随笔
收集整理的這篇文章主要介紹了
【转载】防范SQL注入式攻击
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SQL注入式攻擊是利用是指利用設計上的漏洞,在目標服務器上運行Sql命令以及進行其他方式的攻擊動態生成Sql命令時沒有對用戶輸入的數據進行驗證是Sql注入攻擊得逞的主要原因。
比如:
如果你的查詢語句是
1?select?*?from?admin?where?username="&user&"?and?password="&pwd&""
2??那么,如果我的用戶名是:1 or 1=1
?那么,你的查詢語句將會變成:
1?select?*?from?admin?where?username=1?or?1=1?and?password="&pwd&""
2?這樣你的查詢語句就通過了,從而就可以進入你的管理界面。
?xp_cmdshell
?/add
?exec?master.dbo.xp_cmdshell
?net?localgroup?administrators
?select
?count
?Asc
?char
?mid
?
?:
?"
?insert
?delete?from
?drop?table
?update
?truncate
?from
?%
<!--
?var?url?=?location.search;
?var?re=/^\?(.*)(select%20|insert%20|delete%20from%20|count\(|drop%20table|update%20truncate%20|asc\(|mid\(|char\(|xp_cmdshell|exec%20master|net%20localgroup%20administrators|\"|:|net%20user|\|%20or%20)(.*)$/gi;
?var?e?=?re.test(url);
?if(e)?{
??alert("地址中含有非法字符~");
??location.href="error.asp";
?}
//-->
<script>?
C# 檢查字符串,防SQL注入攻擊
這個例子里暫定為=號和號
?1?bool?CheckParams(params?object[]?args)
?2?{
?3?????string[]?Lawlesses={"=",""};
?4?????if(Lawlesses==null||Lawlesses.Length<=0)return?true;
?5?????//構造正則表達式,例:Lawlesses是=號和號,則正則表達式為?.*[=}].*??(正則表達式相關內容請見MSDN)
?6?????//另外,由于我是想做通用而且容易修改的函數,所以多了一步由字符數組到正則表達式,實際使用中,直接寫正則表達式亦可;
?7?
?8?
?9?????string?str_Regex=".*[";
10?????for(int?i=0;i<?Lawlesses.Length-1;i++)
11?????????str_Regex+=Lawlesses[i]+"|";
12?????str_Regex+=Lawlesses[Lawlesses.Length-1]+"].*";
13?????//
14?????foreach(object?arg?in?args)
15?????{
16?????????if(arg?is?string)//如果是字符串,直接檢查
17?????????{
18?????????????if(Regex.Matches(arg.ToString(),str_Regex).Count>0)
19?????????????return?false;
20?????????}
21?????????else?if(arg?is?ICollection)//如果是一個集合,則檢查集合內元素是否字符串,是字符串,就進行檢查
22?????????{
23?????????????foreach(object?obj?in?(ICollection)arg)
24?????????????{
25?????????????????if(obj?is?string)
26?????????????????{
27?????????????????????if(Regex.Matches(obj.ToString(),str_Regex).Count>0)
28?????????????????????return?false;
29?????????????????}
30?????????????}
31?????????}
32?????}
33?????return?true;
34?
35?轉載自:http://blog.csdn.net/zuoyefeng_com/archive/2007/05/23/1623368.aspx
比如:
如果你的查詢語句是
1?select?*?from?admin?where?username="&user&"?and?password="&pwd&""
2??那么,如果我的用戶名是:1 or 1=1
?那么,你的查詢語句將會變成:
1?select?*?from?admin?where?username=1?or?1=1?and?password="&pwd&""
2?這樣你的查詢語句就通過了,從而就可以進入你的管理界面。
所以防范的時候需要對用戶的輸入進行檢查。特別式一些特殊字符,比如單引號,雙引號,分號,逗號,冒號,連接號等進行轉換或者過濾。
需要過濾的特殊字符及字符串有:
?xp_cmdshell
?/add
?exec?master.dbo.xp_cmdshell
?net?localgroup?administrators
?select
?count
?Asc
?char
?mid
?
?:
?"
?insert
?delete?from
?drop?table
?update
?truncate
?from
?%
下面關于解決注入式攻擊的防范代碼,供大家學習參考!
js版的防范SQL注入式攻擊代碼:
<!--
?var?url?=?location.search;
?var?re=/^\?(.*)(select%20|insert%20|delete%20from%20|count\(|drop%20table|update%20truncate%20|asc\(|mid\(|char\(|xp_cmdshell|exec%20master|net%20localgroup%20administrators|\"|:|net%20user|\|%20or%20)(.*)$/gi;
?var?e?=?re.test(url);
?if(e)?{
??alert("地址中含有非法字符~");
??location.href="error.asp";
?}
//-->
<script>?
C# 檢查字符串,防SQL注入攻擊
這個例子里暫定為=號和號
?1?bool?CheckParams(params?object[]?args)
?2?{
?3?????string[]?Lawlesses={"=",""};
?4?????if(Lawlesses==null||Lawlesses.Length<=0)return?true;
?5?????//構造正則表達式,例:Lawlesses是=號和號,則正則表達式為?.*[=}].*??(正則表達式相關內容請見MSDN)
?6?????//另外,由于我是想做通用而且容易修改的函數,所以多了一步由字符數組到正則表達式,實際使用中,直接寫正則表達式亦可;
?7?
?8?
?9?????string?str_Regex=".*[";
10?????for(int?i=0;i<?Lawlesses.Length-1;i++)
11?????????str_Regex+=Lawlesses[i]+"|";
12?????str_Regex+=Lawlesses[Lawlesses.Length-1]+"].*";
13?????//
14?????foreach(object?arg?in?args)
15?????{
16?????????if(arg?is?string)//如果是字符串,直接檢查
17?????????{
18?????????????if(Regex.Matches(arg.ToString(),str_Regex).Count>0)
19?????????????return?false;
20?????????}
21?????????else?if(arg?is?ICollection)//如果是一個集合,則檢查集合內元素是否字符串,是字符串,就進行檢查
22?????????{
23?????????????foreach(object?obj?in?(ICollection)arg)
24?????????????{
25?????????????????if(obj?is?string)
26?????????????????{
27?????????????????????if(Regex.Matches(obj.ToString(),str_Regex).Count>0)
28?????????????????????return?false;
29?????????????????}
30?????????????}
31?????????}
32?????}
33?????return?true;
34?
35?轉載自:http://blog.csdn.net/zuoyefeng_com/archive/2007/05/23/1623368.aspx
轉載于:https://www.cnblogs.com/kay/archive/2007/06/01/767230.html
總結
以上是生活随笔為你收集整理的【转载】防范SQL注入式攻击的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式事务 dtc 的使用
- 下一篇: 成绩差的同学为何大多当老板?