請注意!常見的ASP腳本攻擊及防范技巧
由于ASP的方便易用,越來越多的網(wǎng)站后臺程序都使用ASP腳本語言。但是, 由于ASP本身存在一些漏洞,稍不小心會給黑客提供可乘之機。事實上,不僅是網(wǎng)管的事,編程人員也必須在某些細節(jié)上注意,養(yǎng)成良好的習(xí)慣,否則會給自己的網(wǎng)站帶來巨大的隱患。目前,大多數(shù)網(wǎng)站上的ASP程序有這樣那樣的漏洞,但如果編寫程序的時候注意一點的話,還是可以避免的。
1、用戶名與口令被破解
攻擊原理:用戶名與口令,往往是黑客們最感興趣的東西,如果被通過某種方式看到源代碼,后果是嚴重的。
防范技巧:涉及用戶名與口令的程序封裝在服務(wù)器端,盡量少在ASP文件里出現(xiàn),涉及與數(shù)據(jù)庫連接的用戶名與口令應(yīng)給予最小的權(quán)限。出現(xiàn)次數(shù)多的用戶名與口令可以寫在一個位置比較隱蔽的包含文件中。如果涉及與數(shù)據(jù)庫連接,在理想狀態(tài)下只給它以執(zhí)行存儲過程的權(quán)限,千萬不要直接給予該用戶修改、插入、刪除記錄的權(quán)限。
2、驗證被繞過
攻擊原理:現(xiàn)在需要經(jīng)過驗證的ASP程序大多是在頁面頭部加一個判斷語句,但這還不夠,有可能被黑客繞過驗證直接進入。
防范技巧:需要經(jīng)過驗證的ASP頁面,可跟蹤上一個頁面的文件名,只有從上一頁面轉(zhuǎn)進來的會話才能讀取這個頁面。3、inc文件泄露問題
攻擊原理:當(dāng)存在ASP的主頁正在制作且沒有進行調(diào)試完成以前,可以被某些搜索引擎機動追加為搜索對象。如果這時候有人利用搜索引擎對這些網(wǎng)頁進行查找,會得到有關(guān)文件的定位,并能在瀏覽器中查看到數(shù)據(jù)庫地點和結(jié)構(gòu)的細節(jié),并以此揭示完整的源代碼。
防范技巧:程序員應(yīng)該在網(wǎng)頁發(fā)布前對它進行徹底的調(diào)試;專家則需要加固ASP文件以便外部的用戶不能看到它們。首先對.inc文件內(nèi)容進行加密,其次也可以使用.asp文件代替.inc文件使用戶無法從瀏覽器直接觀看文件的源代碼。inc文件的文件名不要使用系統(tǒng)默認的或者有特殊含義容易被用戶猜測到的名稱,盡量使用無規(guī)則的英文字母
4、自動備份被下載
攻擊原理:在有些編輯ASP程序的工具中,當(dāng)創(chuàng)建或者修改一個ASP文件時,編輯器自動創(chuàng)建一個備份文件,比如:UltraEdit會備份一個.bak文件,如你創(chuàng)建或者修改了some.asp,編輯器會自動生成一個叫some.asp.bak文件,如果你沒有刪除這個bak文件,攻擊者可以直接下載some.asp.bak文件,這樣some.asp的源程序會被下載。
防范技巧:上傳程序之前要仔細檢查,刪除不必要的文檔。對以BAK為后綴的文件要特別小心。
5、特殊字符
攻擊原理:輸入框是黑客利用的一個目標,他們可以通過輸入腳本語言等對用戶客戶端造成損壞;如果該輸入框涉及數(shù)據(jù)查詢,他們會利用特殊查詢語句,得到更多的數(shù)據(jù)庫數(shù)據(jù),甚至表的全部。因此必須對輸入框進行過濾。但如果為了提率僅在客戶端進行輸入合法性檢查,仍有可能被繞過。
防范技巧:在處理類似留言板、BBS等輸入框的ASP程序中,屏蔽掉HTML、JavaScript、VBScript語句,如無特殊要求,可以限定只允許輸入字母與數(shù)字,屏蔽掉特殊字符。同時對輸入字符的長度進行限制。而且不但要在客戶端進行輸入合法性檢查,同時要在服務(wù)器端程序中進行類似檢查。
6、數(shù)據(jù)庫下載漏洞
攻擊原理:在用Access做后臺數(shù)據(jù)庫時,如果有人通過各種方法知道或者猜到了服務(wù)器的Access數(shù)據(jù)庫的路徑和數(shù)據(jù)庫名稱,那么他也能夠下載這個Access數(shù)據(jù)庫文件,這是非常危險的。
防范技巧:
(1)為你的數(shù)據(jù)庫文件名稱起個復(fù)雜的非常規(guī)的名字,并把它放在幾層目錄下。所謂 “非常規(guī)”, 打個比方說,比如有個數(shù)據(jù)庫要保存的是有關(guān)書籍的信息, 可不要給它起個“book.mdb”的名字,而要起個怪怪的名稱,比如d34ksfslf.mdb, 并把它放在如./kdslf/i44/studi/的幾層目錄下,這樣黑客要想通過猜的方式得到你的Access數(shù)據(jù)庫文件難上加難了。
(2)不要把數(shù)據(jù)庫名寫在程序中。有些人喜歡把DSN寫在程序中,比如:
DBPath = Server.MapPath(“cmddb.mdb”)
conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=” & DBPath
假如萬一給人拿到了源程序,你的Access數(shù)據(jù)庫的名字一覽無余了。因此建議你在ODBC里設(shè)置數(shù)據(jù)源,再在程序中這樣寫:
conn.open“shujiyuan”
(3)使用Access來為數(shù)據(jù)庫文件編碼及加密。首先在“工具→→加密/解密數(shù)據(jù)庫”中選取數(shù)據(jù)庫(如:employer.mdb),然后按確定,接著會出現(xiàn)“數(shù)據(jù)庫加密后另存為”的窗口,可存為:“employer1.mdb”。
要注意的是,以上的動作并不是對數(shù)據(jù)庫設(shè)置密碼,而只是對數(shù)據(jù)庫文件加以編碼,目的是為了防止他人使用別的工具來查看數(shù)據(jù)庫文件的內(nèi)容。
接下來我們?yōu)閿?shù)據(jù)庫加密,首先打開經(jīng)過編碼了的 employer1.mdb,在打開時,選擇“獨占”方式。然后選取功能表的“工具→→設(shè)置數(shù)據(jù)庫密碼”,接著輸入密碼即可。這樣即使他人得到了employer1.mdb文件,沒有密碼他也是無法看到 employer1.mdb中的內(nèi)容。