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...