SQL注入(二)

2022-03-06 07:43:15 字數 3529 閱讀 3512

sql注入(一)

的內容說說防範

sql第5點

5.

限制輸入長度

如果在web

頁面上使用文字框收集使用者輸入的資料

,使用文字框的

maxlength

屬性來限制使用者輸入過長的字元也是乙個很好的方法

,因為使用者的輸入不夠長

,也就減少了貼入大量指令碼的可能性。程式設計師可以針對需要收集的資料型別作出乙個相應的限制策略。

6.url

重寫技術

我們利用

url重寫技術過濾一些

sql注入字元,從而達到防禦

sql注入。因為許多

sql注入是從

url輸入發生的。

7.

傳遞引數盡量不是字元

假設我們顯示一篇新聞的頁面,從

url傳遞引數中獲得

newid

我們可能會隨手寫下下面的**:

string newsid = request.querystring["newsid"];

string newssql = "select * from news where newsid=" + newsid;

如果傳遞過來的引數是數字字元就沒有問題。但是如果傳遞過來的

newsid

是「1 delete from table 」

的話,那麼

sql的值就變成了

「select * from table where newsid=1 delete from news」

。發生注入成功。但是這裡改為

int newsid=int.parse(request.querystring["newsid"].tostring());

string newssql = "select * from news where newsid=" + newsid.tostring();

這裡如果還是上面

"1 delete from table "

會發生錯誤,因為在轉換時候出現了錯誤

從上面的乙個小例子,我們得出在傳遞引數時候盡量不要用字元,免得被注入。

最後是我想擴充套件下利用

url重寫技術來過濾一些

sql注入字元,首先

這裡有一篇關於

url重寫的文章

,我的基本思想是可以利用它,遮蔽一些危險的

sql注入字串,這些字串我們可以人為的設定,畢竟我們還是根據特定的環境設定我們防禦措施。首先我們在

modulerewriter

類中的rewrite

函式得到絕對的

url判斷其中是否有危險字元,如果有我們就將它鏈結到乙個提示使用者您輸入危險的

url位址。如果不是我們繼續判斷是否觸發了其他的

url重寫的規則,觸發了就重寫。這樣就大致上能在

url上防禦危險字元

**

<

rewriterconfig

>

<

rules

>

<

rewriterrule

>

<

lookfor

>

~/d(\d+)\.aspx

lookfor

>

<

sendto

>

~/default_sql_error.aspx

sendto

>

rewriterrule

>

<

rewriterrule

>

<

lookfor

>

~/d(\d+)\.aspx

lookfor

>

<

sendto

>

~/default2.aspx

sendto

>

rewriterrule

>

rules

>

rewriterconfig

>

上面是要在

web.config

配置檔案加上的內容,這裡我加上了兩個重寫規則,第乙個規則是專門針對滿足這個正規表示式的頁面

url檢視是否有危險字元,有危險字元就會傳送到

default_sql_error.aspx

頁面,來示警。這裡我假定會發生危險字元注入的頁面時以

"d"字元開頭並加上數字的頁面(這裡我們可以根據實際情況自己定義,看哪些頁面

url容易發生我們就制定這些頁面的正規表示式),第二個是一般

url重寫。因為這裡我採用的是

模組執行

url重寫,所以加上

這一塊。

第二步就是要在重寫

rewrite

函式了

protected

override

void

rewrite(

string

//獲得配置規則

rewriterrulecollection rules

=rewriterconfiguration.getconfig().rules;

uri url =//

判斷url 中是否含有sql 注入攻擊敏感的字元或字串,如果存在,sqlatflag = 1 ;

string

urlstr

=url.absoluteuri;

intsqlatflag =0

;string

words ="

exec ,xp ,sp ,declare ,cmd ,union ,--";

//如果還有其他敏感的字元或者符號,可以加入上面這行字串中

string

split

=words.split(',

');foreach

(string

s in

split)}if

(sqlatflag ==1

)else}}

}

那麼下一步就是檢驗例子了

首先我們輸入

這樣http://localhost:4563/web/default.aspx?id=1;-- 

沒有改變,就會顯示

default_sql_error.aspx

裡內容「

您輸入了危險字元」。

再輸入http://localhost:4563/web/d11.aspx

就會顯示

default2.aspx

內容,因為這裡觸發了第二個重寫規則

試驗成功。

當然用url

防sql

只是我想到一種怪癖思路,大家如果有什麼特別方法可以共同考論一下,還是引用前輩們話

「見招拆招

」遇到實際的問題我們就根據實際情況解決,選用那個最實用的方法。

**本次用到的例子

SQL注入技術 二 注入分類

用到 開啟burp suite 有注入點就帶入注入漏洞進行操作 mysql select username,email from member where id 1 or 1 1 正常sql語句 正常情況下在資料庫中搜尋是這樣的語句 mysql select id,email from member...

SQL注入總結(二)

手工注入的大致思路 判斷是否存在注入,注入是字元型還是數字型 猜解sql查詢語句中的字段數 order by 2 確定顯示的字段順序 union select 1,2 獲取當前資料庫 union select 1,database 獲取資料庫中的表 xx union select 1,table n...

自學sql注入(二)

這是筆者自行整理出來的有關sql注入的一些知識點,自己還有些迷迷糊糊,可能有些不對的地方。等學完之後,再來詳寫一系列的關於sql注入的文章 自學sql注入 一 自學sql注入 三 sqlmap基礎使用 1 首先利用資料庫自帶的表示式獲取資料庫名 id 1 union select1,2,databa...