以前我出去面試時,人家問我什麼叫sql注入,我很迷芒的告訴人家:我不知道,因為我從來沒有遇到過這類情況。
後來隨著sql注入漸入流行,我才發現,其實sql注入是因為程式設計師寫程式時的不良習慣導致的一類漏洞的總稱。其主要原因是程式設計師沒有處理好sql語句中的單引號「'」。例如,在數字型引數中,沒有用程式去判斷使用者輸入或提交的內容是否是有效的數字。在文字型引數中,沒有去判斷使用者輸入的內容是否帶單引號。至於注入的基本原理外面到處都可以查到,我這邊就不占用篇幅了。
其實sql注入的問題不僅僅存在於網頁,同時也存在於cs結構的資料庫軟體介面中。
最簡單的處理方法是,把所有使用者的輸入內容全部用替換語句把乙個單引號替換成2個單引號;同時對數字、日期等型別作有效性檢測。這樣就可以杜絕sql注入。
但如果乙個大型**中,已經存在有該漏洞了怎麼辦? 我們可以用乙個較為簡單的辦法來處理,就是去判斷所有網頁request引數,然後篩選或替換掉有害內容即可。
可能很多人已經嘗試了把提交過來的form和querystring作了篩選,但結果還是被注入。其原因主要有2點:第一,其篩選的內容不夠完整。之前我有看過一段人家寫的過濾**,只過濾了delete,update,insert等幾個很常用的關鍵字連exec都沒列進去就對外宣稱自己過濾了哪些內容,並警告人家不要攻擊。簡直幼稚到讓人無語!因為大多人注入乙個**都使用的是2進製編碼注入,而這僅需要用cast來轉換,用exec來執行。所以我們在作有害內容篩選時,除了把update、delete、insert等內容濾掉外,還要把這2個關鍵字濾掉。當然如何處理大小寫我就不贅述了。
第二,那是因為程式中使用了偷懶的辦法來獲取提交的資料,直接用request來獲取所有request.form和request.querystring的內容。這樣就存在乙個問題,你們是否知道request也可以獲取來自request.cookies的內容?如果有無聊的人在訪問你們**時提交了假冒的cookie,那你們**的request也就接受了該內容。所以過濾時別忘了把cookies也加進來。
另外,安全性防範在全面性方面肯定無法窮盡,所以請不要對外公開你們自己的安全性策略,以免引誘人家攻擊你們的**。
附上過濾**以供參考:
dim sql_injectdata,sql_inject, _counting
sql_injectdata = "'|and|exec|insert|select|delete|update|count|*|cast|%|chr|mid|master|truncate|char|declare|;|--"
sql_inject = split(sql_injectdata,"|")
for each getstring in request.form
for _counting = 0 to ubound(sql_inject)
if instr(lcase(request(getstring)), sql_inject(_counting)) > 0 then
response.write ""
response.end
end if
next
next
for each getstring in request.querystring
for _counting = 0 to ubound(sql_inject)
if instr(lcase(request(getstring)), sql_inject(_counting)) > 0 then
response.write ""
response.end
end if
next
next
for each getstring in request.cookies
for _counting = 0 to ubound(sql_inject)
if instr(lcase(request(getstring)), sql_inject(_counting)) > 0 then
response.write ""
response.end
end if
next
next
SQL注入以及如何預防
sql注入攻擊指的是通過構建特殊的輸入作為引數傳入web應用程式,而這些輸入大都是sql語法裡的一些組合,通過執行sql語句進而執行攻擊者所要的操作,其主要原因是程式沒有細緻地過濾使用者輸入的資料,致使非法資料侵入系統。根據相關技術原理,sql注入可以分為平台層注入和 層注入。前者由不安全的資料庫配...
sql注入預防
sql注入即是指web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的sql語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。1.簡單又有效的方法 prepar...
sql注入預防
在我們登陸驗證時會發現sql注入的現象。1.sql注入發生原因 因為如果使用者在使用者名稱上輸入的是 or 1 1 時,我們得到的sql語句是select from shop user where username or 1 1 and password d41d8cd98f00b204e98009...