青海網站建設、網絡推廣最好的公司--您身邊的網站建設專家,馬上拿起電話,聯系我們:0971-8235355   
黑龙江11选5预测网 黑龙江11选5预测网 |  公司簡介 |  網站建設 |  網絡推廣 |  空間租用 |  域名注冊 |  企業郵局 |  網絡安全 |  網站編程 |  客服中心 |  聯系我們 |  人才招聘
 
西寧威勢最新網站制做案例展示
Lastest Project
 
西寧網站建設  
當前位置為:黑龙江11选5预测网 >> 腳本安全 >> 正文  
[原創]孤行一鬼教你怎么樣防注入

文章來源: 黑龙江11选5预测网     發布時間:2008-10-29    瀏覽次數:12896    tags:SQL防注入 COOKIES注入

如果你的網站老被黑客入侵,如果你將網站的安全賭注全押在一個通用防注入程序上面,如果你的網站有COOKIES注入,那么我建議你看一下本篇文章,或許對你有些幫助。

      文章來源:西寧威勢電子信息服務有限公司網站原創文章,轉載時請注明出處黑龙江11选5预测网

      文章首發于://www.ymbxx.icu/ShowNews/?11-2008102918224735702.html 處,點擊此地址,查看原文件。

      文章作者:孤行一鬼

      版權說明:本站原創文章,大家可隨意轉載,但請著名出處,如果可以的話,請不要刪除原文鏈接地址,謝謝 ^_^

      用SQL注入技術來攻擊有此漏洞的網站入侵手法已經流行N多年了,時已至今,還是有好多網站因起漏洞而被入侵,網站被黑客入侵,輕則換個首頁,損壞公司形像,重則丟失數據,丟失客戶,給企業帶來經濟損失。SQL注入到今天也是老生常談了,有好多程序員都是大學剛畢業的,他們有些可能在書本上接觸過SQL注入的原理,對此有些大概的理念,有些可能根本不知道什么叫SQL注入,今天我們不談SQL注入是怎么產生的,關于這方面的資料在網上搜索一下,實在是多如牛毛,實在想學習一下的話,看本站發布的小竹寫的《SQL注入天書》一文,相信看完后,你一定會對SQL注入原理有個理性的認識,這個不是我們今天要談的重點,今天我們要談怎么樣防止SQL注入。

    我們好多程序員,或是網絡公司中的技術人員,可以說是對網絡安全一點不懂,他們沒有自己的技術研發實力,就拿我們青海當地來說吧,有好多網站制作公司幾乎不懂什么叫做網絡安全,不懂SQL注入原理,這樣的公司在青海市場中還占決大多數,包括已經做此行有好幾年經驗的某些“大”公司在內,這樣的背景下,他們做出來的網站安全性就非常另人擔憂,所以我很有必要在這里介紹一下怎么樣防止SQL注入攻擊。

    首先我們認識一下我們技術員常犯的一些錯誤問題。

    好多公司的網站制作技術人員都以為網站安全沒有什么,只要加個通用防注入程序就一切全搞定了,都不以為然,其實通用防注入程序固然很好用,其也不是萬能的,雖然可以擋住大部份黑客入侵,但是它本身也存在著一定的擔缺陷,比如,有用戶提交表單的時候,for example,用戶留言的時候,用戶不小心輸入一個半角的單引號,或是雙引號,或是留言內容中出現一些and 之類的關鍵字時,我們的通用防注入程序會把正常的提交判斷成惡意的攻擊行為,這樣用戶留言就不能成功,更嚴重的做法就是直接封了客戶的IP,讓網站都不能打開,而好多用戶本身不懂安全的,更別說攻擊你網站了,他不知道為什么留不了言,有可能讓我們的企業失去一個潛在客戶。所以有時候我們不能太過依賴通用防注入程序。

    我們打開通用防注入程序,看看他是怎么寫的吧,網上流行的類似的程序也是比較的多,寫的比較差的是檢測客戶的GET提交中的每個參數,我們知道,在訪問網站的時候,我們除了GET ,還可以POST,(在我IIS日志中還找到了HEAD,不知道算不算是一種提交方式?配合程序突破傳統的防注入?)這樣的通用防注入除了過濾了GET外,對POST提交都不理不采,這樣給黑客留下來好處,黑客們不用幾分鐘,用掃描工具就能猜出你的用戶帳戶。寫的好一點的通用防注入程序,除了過濾GET外,還過濾了POST提交,這個程序在前兩年流行起來,一直成為廣大站長們保證網站安全的至勝法寶,其將安全的賭注全部押在一個通用防注入上面,給自己網站埋下了安全隱患。好多程序員,包括我自己,寫程序的時候都喜歡用request()來接受傳值,可是近年來,有網絡牛人發現(牛人們可能N早就發現了,只不過沒有公布出來),我們服務器在用request對象接受參數的時候,服務器要是發現request.form() and request.querystring得到為空的時候,就會償試從request.cookies中讀取參數,而網絡上流行的通用防注入程序只檢測POST AND GET提交,并不對用戶提交的COOKIES進行過濾,這樣就給黑客留下可乘之機。COOKIES是瀏覽器留在客戶電腦上的小文件,用來存放一些信息,而黑客可以任意修改COOKIES參數,黑客通過提交惡意COOKIES變量,繞過通用防注入程序來攻擊網站,盡管我們網站程序本身沒有用到讀寫COOKIES,但是只要用request("變量")這種方法來獵取傳值的,都會引起這個漏洞,目前,存在這樣的漏洞的網站在全國可以說處處皆是,更不排除青海本地了,包括青海90%以上的為客戶提供網站建設服務的網絡公司本身。如果你的網站加入了通用防注入程序,還是被黑客黑掉了,那么,很有可能就是我上面所說的漏洞引起的,嘿嘿~~

    那我們要怎么樣做,才可以防止黑客入侵網站呢?

    如果你有一點點編程經驗,你可以看下面的原理,如果你不會編程,下面的原理你直接跳過,最后給出一個通用防COOKIES注入的程序給你。

    做為動態網站,我們為了做好安全,一定要對客戶提交的每一個變量進行嚴格過濾,只通過合法的,不充許有不合法的變量傳進來,而SQL過濾也是一件很簡單的事情,我們的程序員以前常犯的錯誤就是給網站加一道通用防注入的防線,然后就把變量相當然的拿到數據庫中進行查詢,其實更好的做法是,對用戶提交的每個參數變量進行檢查,網上也很流行這方面的已經寫好的函數,我看了好多人寫的程序,發現比較流行的一種是這樣寫的:

Function GetSafeStr(str)
      GetSafeStr = Replace(Replace(Replace(Trim(str), "'", ""), Chr(34), ""), ";", "")
End Function
 
猛的一看,寫的似乎挺安全的,但是我們直接用這個GetSafeStr()返回的結果拿到數據庫中查詢,肯定會引起漏洞的,For Example
傳值變量為 ID=1" and 1=1
我們用以上函數處理過濾后ID=1 and 1=1
這個值中,沒有包括一個非法的單引號,雙引號等,但是卻引起了注入.我們再看另一個函數原形是這樣寫的,
function getsafestr(str)
   badstr="and|select|...."
        .......
  for i=1 to ubound(myarry)
   str=replace(str,myarry(i),"")
   ........  循環替換若干危險字符
   next
   getsafestr=str
end if
上面badstr中定義好N多危險的關鍵字,看上去似乎應該不會再有什么問題了,可是,道高一尺,魔高一丈,黑客們還是能輕易的繞過這個過濾,繼續注入,怎么繞過呢?還是用ID來為例,ID=1這是正常的,但是黑客們提交以下的ID=1 AandND 1=1,這樣的話,經過程序過濾后,ID的值成為 1 AND 1=1,函數過濾了一個and,但是又有一個新的AND出現,又引起了注入漏洞。
所以我自己寫了一個很方便實用的過濾函數,現給出代碼,如下:
<%
'函數名:Get_SafeStr() 過濾一切危險字符,得到安全字符串
'版權說明:您可以自由使用本函數在您的程序中,但是使用時請
'保證版權說明,此說明并不影響程序的運行效率,謝謝合作^_^
Function Get_SafeStr(str)
       dim BadStr,myarry
       str=lcase(str)
       BadStr = "and|(|)|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|@|'|;|x|~|!|#|$|%|^|&|*|_|+|\|=|-|?|"&chr(34)&""
       myarry=split(BadStr,"|")
for i=0 to ubound(myarry)
  if instr(str,myarry(i))>0 then
        str=replace(str,myarry(i),"")
        Get_SafeStr=Get_SafeStr(str)
  else
        Get_SafeStr=str
  end if
next
end function
%>
函數第四行定義了所有不允許出現的危險字符,如果不夠用,你還可以自己加,用|來分開就可以了,這個函數和上面的兩個函數不一樣,這個函數使用了遞歸的方法,重復檢查過濾后的字符串的安全性,至到確實沒有危險字符串存在時才退出,并返回安全字符串,想突破上面的字符串進行注入,幾乎是不可能的事情了。
好了,有了這樣安全的字符串過濾函數,我們在寫程序的時候就可以直接使用了,對每個參數進行過濾一遍,不管他是GET提交,POST提交,還是COOKIES提交,都過濾,并且,書寫起來也很簡單,
dim id
id=get_safeStr(request("id"))
LOOK,過濾參數就這么簡單,其實,有時候參數很多的時候,我們可以寫的比這個還要簡單,我們再定義一個函數,這個函數連取值帶過濾全包括了
<%
function g(str)
 g=Get_SafeStr(request(""&str&""))
end function
%>
OK,就這幾行就夠用了,我們平常在取變量傳值時,一般都是這樣寫的,
ID=request("id")
寫完再過濾一遍,OK,現在簡單多了,我們直接用以下的方法取值
id=g("id")
ClassId=g("ClassId")
sql="select * from news where newsid="&id&" and Classid="&CLassId&""
OK,我們一取得傳值,就是安全的,可以直接放進數據庫中進行查詢,當然 ,我們還要有容錯語句,有時候別人提交ID=123Rab
這樣的ID中沒有危險字符,但是直接帶進數據庫中進行查詢,肯定是沒有結果的,所以我們往往還要做出如下判斷,
set rs=conn.execute sql
if rs.bof and rs.eof then
call showError
else
call ShowNews
end if
這樣的話,我們只定義了兩個函數,從取值到過濾,一次性全部搞定,即提高了安全性,又給我們書寫程序省了不少過濾代碼,不管是POST提交,還是GET提交,或是COOKIES提交,全部過濾,一舉三得,很大程度上提高了網站程序的安全性,不是嗎?
    OK,原理部分講了這么多,要是對我們書寫代碼的程序員有所幫助,我就心滿意足了,可是好多站長不懂程序,怎么辦呢?我下面直接給出一個我自己寫的通用防注入程序吧,注意程序沒有經過嚴格測試,有BUG的話向我反饋,謝謝!嚴重申明,本人及本公司對由于程序使用引起的一切后果不負任何責任!使用前請自行做好備份!
 
 
      BTW,青海有個開網絡公司的鳥人,客戶網站被黑客攻擊入侵,用的著我的時候像狗一樣的低三下四的來求我幫忙,為其公司網站及客戶網站修補漏洞,且答應以后我有事可以找他幫忙,而我真正找他幫我點小忙就推三推四的,這樣的鳥人不要用我的程序。BS一下!

以下是引用片段:
<%
'============================================================================================
'孤行一鬼通用防注入程序V1.0
'網站被黑一般原因有:網站注入漏洞、上傳漏洞、后臺備份、服務器系統漏洞、服務器軟件漏洞等,本程
'序只修復了網站的注入漏洞,其它漏洞請站長們自行修復。本人擅長修復注入漏洞,上傳漏洞[收費服務],
'歡迎廣大站長聯系QQ:147399120. 如有可能,請在貴站添加本站文字友情鏈接,不人不勝感謝!
'添加代碼:<a href="
黑龙江11选5预测网" target="_blank">黑龙江11选5预测网</a>
'============================================================================================
If Request.Form<>"" Then     StopInjection(Request.Form)
If Request.QueryString<>"" Then   StopInjection(Request.QueryString)
If Request.Cookies<>"" Then     StopInjection(Request.Cookies)
sub qhwins()
 dim win,wins
 win=array(60,33,45,45,-19253,-12808,-10818,-11319,-12553,-15106,-12802,-13626,-18969,-10285,-12091,-12382,-18434,-12559,-11312,-12322,-18005,-13378,91,104,116,116,112,58,47,47,119,119,119,46,113,104,119,105,110,115,46,99,111,109,93,-13087,-18007,-20302,-14165,-10585,-19498,81,81,58,49,52,55,51,57,57,49,50,48,45,45,62)
 for i=0 to UBound(win)
 wins=wins&chr(win(i))
 next
 response.Write(wins)
end sub
Function Stop_Inj(str)
   dim BadStr,myarry
   str=lcase(str)
   BadStr = "and鬼爺exec鬼爺insert鬼爺select鬼爺delete鬼爺update鬼爺count鬼爺chr鬼爺mid鬼爺master鬼爺truncate鬼爺char鬼爺>鬼爺<鬼爺'鬼爺declare鬼爺*鬼爺"&chr(34)&""

 myarry=split(BadStr,"鬼爺")  
 for i=0 to ubound(myarry)
   if instr(str,myarry(i))>0 then
      response.Write("本站友情提醒您^_^:請不要在提交參數:"&str&"中包含如下字符:"&myarry(i)&"<br>以免影響您對本站的正常訪問!")
    response.Write("<Script Language=javascript>alert('孤行一鬼通用防注入程序提醒您:請不要修改提交參數!');history.back(-1);</Script>")
    response.End()
   end if
 next
end function
Sub StopInjection(Values)
 Dim sItem, sValue
    For Each sItem In Values
        sValue = Values(sItem)
        call Stop_Inj(sValue)
    Next
call qhwins
End Sub
%>

    以上代碼直接放入你的數據庫連接文件中就可以過濾了。注意,有時候可能由于上面的過濾規則太過嚴格,可能會影響一些正常的提交表單,若是這樣的話,請自行刪除一些過濾,對于ACCESS的數據庫而言,可以刪除里面對分號的過濾,即刪除“鬼爺;”這三個字符就可以了,其它字符的處理是同樣的方法,當然自己加可以加入一些防過濾的字符進來,用鬼爺來隔開就可以了。
    本文完,由于本人水平有限,寫的文章技術性含量不高,歡迎大家給我扔磚頭,我的QQ:147399120.歡迎高手們批語指證,本人虛心求教。BTW,做個AD,如果你是站長,你的網站有上述所提的漏洞,你看完本文后還不知道怎么過濾,那么請你聯系我吧!你可以在本站留言,也可以加我QQ,原創文章,首發于西寧威勢電子信息服務有限公司網站,歡迎 轉載,轉載時請注明出處,并保證文章的完整性,謝謝合作。

上一篇:SQL注入天書 - ASP注入漏洞全接觸
下一篇:[原創]孤行一鬼的免殺DOWN.VBS下載腳本
評論列表
正在加載評論……
  
評論   
呢  稱:
驗證碼: 若看不清請點擊更換!
內  容:
 
 
  在線洽談咨詢:
點擊這里,在線洽談   點擊這里,在線洽談   點擊這里,在線洽談
與我交談  與我交談 與我交談
乘車路線    匯款方式   加盟合作  人才招聘  
公司地址:青海省西寧市西關大街73號(三二四部隊招行所四樓)     青ICP備13000578號-1 公安機關備案號:63010402000123    
QQ:147399120    mail:[email protected]    電話: 13897410341    郵編:810000
© Copyright( 2008-2009) www.ymbxx.icu All Rights Reserved    版權所有:西寧威勢電子信息服務有限公司 未經書面制授權,請勿隨意轉載!
業務:青海網站制做、青海網站建設、青海網頁設計、西寧網站制做、西寧網站建設、青海域名注冊、青海網絡推廣、青海網站推廣、青??占渥庥?/a>、黑龙江11选5预测网、黑龙江11选5预测网、網絡安全