萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> asp編程 >> 防范ASP網站漏洞拒絕入侵的方法

防范ASP網站漏洞拒絕入侵的方法

 1、數據庫下載漏洞

  攻擊原理:在用Access做後台數據庫時,如果有人通過各種方法知道或者猜到了服務器的Access數據庫的路徑和數據庫名稱,那麼他也能夠下載這個Access數據庫文件,這是非常危險的。

  防范技巧:

  (1)為你的數據庫文件名稱起個復雜的非常規的名字,並把它放在幾層目錄下。所謂 “非常規”, 打個比方說,比如有個數據庫要保存的是有關書籍的信息, 可不要給它起個“book.mdb”的名字,而要起個怪怪的名稱,比如d34ksfslf.mdb, 並把它放在如./kdslf/i44/studi/的幾層目錄下,這樣黑客要想通過猜的方式得到你的Access數據庫文件就難上加難了。

  (2)不要把數據庫名寫在程序中。有些人喜歡把DSN寫在程序中,比如:

 DBPath = Server.MapPath(“cmddb.mdb”)

  conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=” & DBPath

  假如萬一給人拿到了源程序,你的Access數據庫的名字就一覽無余了。因此建議你在ODBC裡設置數據源,再在程序中這樣寫:

 conn.open“shujiyuan”

  (3)使用Access來為數據庫文件編碼及加密。首先在“工具→安全→加密/解密數據庫”中選取數據庫(如:employer.mdb),然後按確定,接著會出現“數據庫加密後另存為”的窗口,可存為:“employer1.mdb”。

  要注意的是,以上的動作並不是對數據庫設置密碼,而只是對數據庫文件加以編碼,目的是為了防止他人使用別的工具來查看數據庫文件的內容。

  接下來我們為數據庫加密,首先打開經過編碼了的 employer1.mdb,在打開時,選擇“獨占”方式。然後選取功能表的“工具→安全→設置數據庫密碼”,接著輸入密碼即可。這樣即使他人得到了employer1.mdb文件,沒有密碼他也是無法看到 employer1.mdb中的內容。

3、inc文件洩露問題

  攻擊原理:當存在ASP的主頁正在制作且沒有進行最後調試完成以前,可以被某些搜索引擎機動追加為搜索對象。如果這時候有人利用搜索引擎對這些網頁進行查找,會得到有關文件的定位,並能在浏覽器中查看到數據庫地點和結構的細節,並以此揭示完整的源代碼。

  防范技巧:程序員應該在網頁發布前對它進行徹底的調試;安全專家則需要加固ASP文件以便外部的用戶不能看到它們。首先對.inc文件內容進行加密,其次也可以使用.asp文件代替.inc文件使用戶無法從浏覽器直接觀看文件的源代碼。inc文件的文件名不要使用系統默認的或者有特殊含義容易被用戶猜測到的名稱,盡量使用無規則的英文字母。

2、用戶名與口令被破解

  攻擊原理:用戶名與口令,往往是黑客們最感興趣的東西,如果被通過某種方式看到源代碼,後果是嚴重的。防范技巧:涉及用戶名與口令的程序最好封裝在服務器端,盡量少在ASP文件裡出現,涉及與數據庫連接的用戶名與口令應給予最小的權限。出現次數多的用戶名與口令可以寫在一個位置比較隱蔽的包含文件中。如果涉及與數據庫連接,在理想狀態下只給它以執行存儲過程的權限,千萬不要直接給予該用戶修改、插入、刪除記錄的權限。

3、ASP木馬

  已經講到這裡了,再提醒各位論壇站長一句,小心你們的文件上傳:為什麼論壇程序被攻破後主機也隨之被攻擊者占據。原因就在……對!ASP木馬!一個絕對可惡的東西。病毒麼?非也.把個文件隨便放到你論壇的程序中,您老找去吧。不吐血才怪哦。如何才能防止ASP木馬被上傳到服務器呢?方法很簡單,如果你的論壇支持文件上傳,請設定好你要上傳的文件格式,我不贊成使用可更改的文件格式,直接從程序上鎖定,只有圖象文件格式,和壓縮文件就完全可以,多給自己留點方便也就多給攻擊者留點方便。怎麼判斷格式,我這裡收集了一個,也改出了一個,大家可以看一下: 

  程序體(10)

 ’判斷文件類型是否合格 

  Private Function CheckFileExt (fileEXT) 

  dim Forumupload 

  Forumupload="gif,jpg,bmp,jpeg" 

  Forumupload=split(Forumupload,",") 

  for i=0 to ubound(Forumupload) 

  if lcase(fileEXT)=lcase(trim(Forumupload(i))) then 

  CheckFileExt=true 

  exit Function 

  else 

  CheckFileExt=false 

  end if 

  next 

  End Function 

  ‘驗證文件內容的合法性 

set MyFile = server.CreateObject ("scripting.FileSystemObject") 

  set MyText = MyFile.OpenTextFile (sFile, 1) ’ 讀取文本文件 

  sTextAll = lcase(MyText.ReadAll): MyText.close 

  ’判斷用戶文件中的危險操作 

  sStr ="8 .getfolder .createfolder .deletefolder .createdirectory  

  .deletedirectory" 

  sStr = sStr & " .saveas wscript.shell script.encode" 

  sNoString = split(sStr," ") 

  for i = 1 to sNoString(0) 

  if instr(sTextAll, sNoString(i)) <> 0 then 

  sFile = Upl.Path & sFileSave: fs.DeleteFile sFile 

  Response.write "<center><br><big>"& sFileSave &"文件中含有與操作目錄等有關的命令"&_ 

  "<br><font color=red>"& mid(sNoString(i),2) &"</font>,

 為了安全原因,<b>不能上傳。<b>"&_"</big></center></html>" 

  Response.end 

  end if 

  next

4、驗證被繞過

  攻擊原理:現在需要經過驗證的ASP程序大多是在頁面頭部加一個判斷語句,但這還不夠,有可能被黑客繞過驗證直接進入。

  防范技巧:需要經過驗證的ASP頁面,可跟蹤上一個頁面的文件名,只有從上一頁面轉進來的會話才能讀取這個頁面。

5、自動備份被下載

  攻擊原理:在有些編輯ASP程序的工具中,當創建或者修改一個ASP文件時,編輯器自動創建一個備份文件,比如:UltraEdit就會備份一個.bak文件,如你創建或者修改了some.asp,編輯器會自動生成一個叫some.asp.bak文件,如果你沒有刪除這個bak文件,攻擊者可以直接下載some.asp.bak文件,這樣some.asp的源程序就會被下載。

  防范技巧:上傳程序之前要仔細檢查,刪除不必要的文檔。對以BAK為後綴的文件要特別小心。

6、防范遠程注入攻擊

  這類攻擊在以前應該是比較常見的攻擊方式,比如POST攻擊,攻擊者可以隨便的改變要提交的數據值已達到攻擊目的.又如:COOKIES 的偽造,這一點更值得引起程序編寫者或站長的注意,不要使用COOKIES來做為用戶驗證的方式,否則你和把鑰匙留給賊是同一個道理. 

  比如:

 If trim(Request. cookies ("uname"))="fqy" and Request.cookies("upwd") =”fqy#e3i5.com” then 

  ……..more……… 

  End if

  我想各位站長或者是喜好寫程序的朋友千萬別出這類錯誤,真的是不可饒恕.偽造COOKIES 都多少年了,你還用這樣的就不能怪別人跑你的密碼.涉及到用戶密碼或者是用戶登陸時,你最好使用session 它才是最安全的.如果要使用COOKIES就在你的COOKIES上多加一個信息,SessionID,它的隨機值是64位的,要猜解它,不可能.例:

 if not (rs.BOF or rs.eof) then 

  login="true" 

  Session("username"&sessionID) = Username 

  Session("password"& sessionID) = Password 

  ‘Response.cookies(“username”)= Username 

  ‘Response.cookies(“Password”)= Password

  下面我們來談談如何防范遠程注入攻擊,一般的攻擊都是將單表提交文件拖到本地,將Form ACTION=”chk.asp” 指向你服務器中處理數據的文件即可.如果你全部的數據過濾都在單表頁上,那麼恭喜你,你將已經被腳本攻擊了.

  怎麼才能制止這樣的遠程攻擊?好辦,請看代碼如下: 程序體(9)

 <% 

  server_v1=Cstr(Request.ServerVariables("HTTP_REFERER")) 

  server_v2=Cstr(Request.ServerVariables("SERVER_NAME")) 

  if mid(server_v1,8,len(server_v2))<>server_v2 then 

  response.write "<br><br><center>" 

  response.write " " 

  response.write "你提交的路徑有誤,禁止從站點外部提交數據請不要亂改參數!" 

  response.write " 

  response.end 

  end if 

  %> 

‘個人感覺上面的代碼過濾不是很好,有一些外部提交竟然還能堂堂正正的進來,於是再寫一個. 

 

copyright © 萬盛學電腦網 all rights reserved