購物網(wǎng)站后臺好管理嗎百度seo原理
一 前言
Microsoft Active Server Pages(ASP)是服務(wù)器端腳本編寫環(huán)境,使用它可以創(chuàng)建和運(yùn)行動(dòng)態(tài)、交互的 Web 服務(wù)器應(yīng)用程序。使用 ASP 可以組合 HTML 頁 、腳本命令和 ActiveX 組件以創(chuàng)建交互的 Web 頁和基于 Web 的功能強(qiáng)大的應(yīng)用程序。
現(xiàn)在很多網(wǎng)站特別是電子商務(wù)方面的網(wǎng)站,在前臺上大都用ASP來實(shí)現(xiàn)。以至于現(xiàn)在ASP在網(wǎng)站應(yīng)用上很普遍。
ASP是開發(fā)網(wǎng)站應(yīng)用的快速工具,但是有些網(wǎng)站管理員只看到ASP的快速開發(fā)能力,卻忽視了ASP安全問題。ASP從一開始就一直受到眾多漏洞,后門的困擾,包括%81的噩夢,密碼驗(yàn)證問題,IIS漏洞等等都一直使ASP網(wǎng)站開發(fā)人員心驚膽跳。
本文試圖從開放了ASP服務(wù)的操作系統(tǒng)漏洞和ASP程序本身漏洞,闡述ASP安全問題,并給出解決方法或者建議。
二 關(guān)鍵字
ASP,網(wǎng)絡(luò)安全,IIS,SSL,加密。
三 ASP工作機(jī)理
Active Server Page技術(shù)為應(yīng)用開發(fā)商提供了基于腳本的直觀、快速、高效的應(yīng)用開發(fā)手段,極大地提高了開發(fā)的效果。在討論ASP的安全性問題之前,讓我們來看看ASP是怎么工作的。ASP腳本是采用明文(plain text)方式來編寫的。
ASP腳本是一系列按特定語法(目前支持vbscript和jscript兩種腳本語言)編寫的,與標(biāo)準(zhǔn)HTML頁面混合在一起的腳本所構(gòu)成的文本格式的文件。當(dāng)客戶端的最終用戶用WEB瀏覽器通過INTERNET來訪問基于ASP腳本的應(yīng)用時(shí),WEB瀏覽器將向WEB服務(wù)器發(fā)出HTTP請求。WEB服務(wù)器分析、判斷出該請求是ASP腳本的應(yīng)用后,自動(dòng)通過ISAPI接口調(diào)用ASP腳本的解釋運(yùn)行引擎(ASP.DLL)。ASP.DLL將從文件系統(tǒng)或內(nèi)部緩沖區(qū)獲取指定的ASP腳本文件,接著就進(jìn)行語法分析并解釋執(zhí)行。最終的處理結(jié)果將形成HTML格式的內(nèi)容,通過WEB服務(wù)器"原路"返回給WEB瀏覽器,由WEB瀏覽器在客戶端形成最終的結(jié)果呈現(xiàn)。這樣就完成了一次完整的ASP腳本調(diào)用。若干個(gè)有機(jī)的ASP腳本調(diào)用就組成了一個(gè)完整的ASP腳本應(yīng)用。
讓我們來看看運(yùn)行ASP所需的環(huán)境:
Microsoft Internet Information Server 3.0/4.0/5.0 on NT Server
Microsoft Internet Information Server 3.0/4.0/5.0 on Win2000
Microsoft Personal Web Server on Windows 95/98
WINDOWS NT Option Pack所帶的Microsoft IIS提供了強(qiáng)大的功能,但是IIS在網(wǎng)絡(luò)安全方面卻是比較危險(xiǎn)的。因?yàn)楹苌儆腥藭?huì)用Windows 95/98當(dāng)服務(wù)器,因此本文我更多的從NT中的IIS安全問題來探討。
四 微軟自稱的ASP的安全優(yōu)點(diǎn)
雖然我們本文的重點(diǎn)是探討ASP漏洞和后門,但是有必要談?wù)凙SP在網(wǎng)絡(luò)安全方面的"優(yōu)點(diǎn)",之所以加個(gè)"",是因?yàn)橛袝r(shí)這些微軟宣稱的"優(yōu)點(diǎn)"恰恰是其安全隱犯。
微軟稱ASP在網(wǎng)絡(luò)安全方面一大優(yōu)點(diǎn)就是用戶不能看到ASP的源程序,從ASP的原理上看,ASP在服務(wù)端執(zhí)行并解釋成標(biāo)準(zhǔn)的HTML語句,再傳送給客戶端瀏覽器。"屏蔽"源程序能很好的維護(hù)ASP開發(fā)人員的版權(quán),試想你辛辛苦苦做了一個(gè)很優(yōu)秀的程序,給人任意COPY,你會(huì)怎么想?而且黑客還能分析你的ASP程序,挑出漏洞。更重要的是有些ASP開發(fā)者喜歡把密碼,有特權(quán)的用戶名和路徑直接寫在程序中,這樣別人通過猜密碼,猜路徑,很容易找到攻擊系統(tǒng)的"入口"。但是目前已經(jīng)發(fā)現(xiàn)了很多能查看ASP源程序的漏洞,后面我們還要討論。
IIS支持虛擬目錄,通過在"服務(wù)器屬性"對話框中的"目錄"標(biāo)簽可以管理虛擬目錄。建立虛擬目錄對于管理WEB站點(diǎn)具有非常重要的意義。虛擬目錄隱藏了有關(guān)站點(diǎn)目錄結(jié)構(gòu)的重要信息。因?yàn)樵跒g覽器中,客戶通過選擇"查看源代碼",很容易就能獲取頁面的文件路徑信息,如果在WEB頁中使用物理路徑,將暴露有關(guān)站點(diǎn)目錄的重要信息,這容易導(dǎo)致系統(tǒng)受到攻擊。其次,只要兩臺機(jī)器具有相同的虛擬目錄,你就可以在不對頁面代碼做任何改動(dòng)的情況下,將WEB頁面從一臺機(jī)器上移到另一臺機(jī)器。還有就是,當(dāng)你將WEB頁面放置于虛擬目錄下后,你可以對目錄設(shè)置不同的屬性,如:Read、Excute、Script。讀訪問表示將目錄內(nèi)容從IIS傳遞到瀏覽器。而執(zhí)行訪問則可以使在該目錄內(nèi)執(zhí)行可執(zhí)行的文件。當(dāng)你需要使用ASP時(shí),就必須將你存放.asp文件的目錄設(shè)置為"Excute(執(zhí)行)"。建議大家在設(shè)置WEB站點(diǎn)時(shí),將HTML文件同ASP文件分開放置在不同的目錄下,然后將HTML子目錄設(shè)置為"讀",將ASP子目錄設(shè)置為"執(zhí)行",這不僅方便了對WEB的管理,而且最重要的提高了ASP程序的安全性,防止了程序內(nèi)容被客戶所訪問。
五 ASP漏洞分析和解決方法
有人說一臺不和外面聯(lián)系的電腦是最安全的電腦,一個(gè)關(guān)閉所有端口,不提供任何服務(wù)的電腦也是最安全的。黑客經(jīng)常利用我們所開放的端口實(shí)施攻擊,這些攻擊最常見的是DDOS(拒絕服務(wù)攻擊).下面我會(huì)列出ASP的二十幾個(gè)漏洞,每個(gè)漏洞都會(huì)有漏洞描述和解決方法。
1 在ASP程序后加個(gè)特殊符號,能看到ASP源程序
受影響的版本:
win95+pws
IIS3.0
98+pws4 不存在這個(gè)漏洞。
IIS4.0以上的版本也不存在這個(gè)漏洞。
問題描述:
這些特殊符號包括小數(shù)點(diǎn),%81, ::$DATA。比如:
http://someurl/somepage.asp.
http:// someurl/somepage.asp%81
http:// someurl/somepage.asp::$DATA
http:// someurl/somepage.asp %2e
http:// someurl/somepage %2e%41sp
http:// someurl/somepage%2e%asp
http:// someurl/somepage.asp %2e
http://someurl/msadc/samples/selector/showcode.asp?source=/msadc/samples/../../../../../../boot.ini (可以看到boot.ini的文件內(nèi)容)
那么在安裝有IIS3.0和win95+PWS的瀏覽中就很容易看到somepage.asp的源程序。究竟是什么原因造成了這種可怕的漏洞呢?究其根源其實(shí)是 Windows NT 特有的文件系統(tǒng)在做怪。有一點(diǎn)常識的人都知道在 NT 提供了一種完全不同于 FAT 的文件系統(tǒng):NTFS,這種被稱之為新技術(shù)文件系統(tǒng)的技術(shù)使得 NT 具有了較高的安全機(jī)制,但也正是因?yàn)樗a(chǎn)生了不少令人頭痛的隱患。大家可能不知道, NTFS 支持包含在一個(gè)文件中 的多數(shù)據(jù)流,而這個(gè)包含了所有內(nèi)容的主數(shù)據(jù)流被稱之為"DATA",因此使得在瀏覽器 里直接訪問 NTFS 系統(tǒng)的這個(gè)特性而輕易的捕獲在文件中的腳本程序成為了可能。然而 直接導(dǎo)致 ::$DATA 的原因是由于 IIS 在解析文件名的時(shí)候出了問題,它沒有很好地規(guī)范文件名。
解決方法和建議:
如果是Winodws NT用戶,安裝IIS4.0或者IIS5.0,Windows2000不存在這個(gè)問題。如果是win95用戶,安裝WIN98和PWS4.0。
2 ACCESS mdb 數(shù)據(jù)庫有可能被下載的漏洞
問題描述:
在用ACCESS做后臺數(shù)據(jù)庫時(shí),如果有人通過各種方法知道或者猜到了服務(wù)器的ACCESS數(shù)據(jù)庫的路徑和數(shù)據(jù)庫名稱,那么他能夠下載這個(gè)ACCESS數(shù)據(jù)庫文件,這是非常危險(xiǎn)的。比如:如果你的ACCESS數(shù)據(jù)庫book.mdb放在虛擬目錄下的database目錄下,那么有人在瀏覽器中打入:
http:// someurl/database/book.mdb
如果你的book.mdb數(shù)據(jù)庫沒有事先加密的話,那book.mdb中所有重要的數(shù)據(jù)都掌握在別人的手中。
解決方法:
(1) 為你的數(shù)據(jù)庫文件名稱起個(gè)復(fù)雜的非常規(guī)的名字,并把他放在幾目
錄下。所謂"非常規(guī)",打個(gè)比方:比如有個(gè)數(shù)據(jù)庫要保存的是有關(guān)書籍的信息,可不要把他起個(gè)"book.mdb"的名字,起個(gè)怪怪的名稱,比如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),然后接確定,接著會(huì)出現(xiàn)"數(shù)據(jù)庫加密后另存為"的窗口,存為:employer1.mdb。接著employer.mdb就會(huì)被編碼,然后存為employer1.mdb..
要注意的是,以上的動(dòng)作并不是對數(shù)據(jù)庫設(shè)置密碼,而只是對數(shù)據(jù)庫文件加以編碼,目的是為了防止他人使用別的工具來查看數(shù)據(jù)庫文件的內(nèi)容。
接下來我們?yōu)閿?shù)據(jù)庫加密,首先以打開經(jīng)過編碼了的employer1.mdb,在打開時(shí),選擇"獨(dú)占"方式。然后選取功能表的"工具->安全->設(shè)置數(shù)據(jù)庫密碼",接著輸入密碼即可。
為employer1.mdb設(shè)置密碼之后,接下來如果再使用ACCEES數(shù)據(jù)庫文件時(shí),則ACCESS會(huì)先要求輸入密碼,驗(yàn)證正確后才能夠啟動(dòng)數(shù)據(jù)庫。
不過要在ASP程序中的connection對象的open方法中增加PWD的參數(shù)即可,例如:
param="driver={Microsoft Access Driver (*.mdb)};Pwd=yfdsfs"
param=param&";dbq="&server.mappath("employer1.mdb")
conn.open param
這樣即使他人得到了employer1.mdb文件,沒有密碼他是無法看到employer1.mdb的。
五 ASP漏洞分析和解決方法
3 code.asp文件會(huì)泄漏ASP代碼
問題描述:
舉個(gè)很簡單的例子,在微軟提供的 ASP1.0 的例程里有一個(gè) .asp 文件,專門用來查看其它 .asp 文件的源代碼,該文件為 ASPSamp/Samples/code.asp。如果有人把這個(gè)程序上傳到服務(wù)器,而服務(wù)器端沒有任何防范措施的話,他就可以很容易地查看他人的程序。例如 :
code.asp?source=/directory/file.asp
不過這是個(gè)比較舊的漏洞了,相信現(xiàn)在很少會(huì)出現(xiàn)這種漏洞。
下面這命令是比較新的:
http://someurl/iissamples/exair/howitworks/code.asp?/lunwen/soushuo.asp=xxx.asp
最大的危害莫過于asa文件可以被上述方式讀出;數(shù)據(jù)庫密碼以明文形式暴露在黑客眼前;
問題解決或建議:
對于IIS自帶的show asp code的asp程序文件,刪除該文件或者禁止訪問該目錄即可
4、filesystemobject 組件篡改下載 fat 分區(qū)上的任何文件的漏洞
問題描述:
IIS3、 IIS4 的 ASP 的文件操作都可以通過 filesystemobject 實(shí)現(xiàn),包括文本文件的讀寫目錄操作、文件的拷貝改名刪除等,但是這個(gè)強(qiáng)大的功能也留下了非常危險(xiǎn)的 "后門"。利用 filesystemobjet 可以篡改下載 fat 分區(qū)上的任何文件。即使是 ntfs 分區(qū),如果權(quán)限沒有設(shè)定好的話,同樣也能破壞,一不小心你就可能遭受"滅頂之災(zāi) "。遺憾的是很多 webmaster 只知道讓 web 服務(wù)器運(yùn)行起來,很少對 ntfs 進(jìn)行權(quán)限 設(shè)置,而 NT 目錄權(quán)限的默認(rèn)設(shè)置偏偏安全性又低得可怕。因此,如果你是 Webmaster,建議你密切關(guān)注服務(wù)器的設(shè)置,盡量將 web 目錄建在 ntfs 分區(qū)上,目錄不要設(shè)定 everyone full control,即使是是管理員組的成員一般也沒什么必要 full control,只要有讀取、更改權(quán)限就足夠了。 也可以把filesystemobject的組件刪除或者改名。
5、輸入標(biāo)準(zhǔn)的HTML語句或者javascript語句會(huì)改變輸出結(jié)果
問題描述:
在輸入框中打入標(biāo)準(zhǔn)的HTML語句會(huì)得到什么相的結(jié)果呢?
比如一個(gè)留言本,我們留言內(nèi)容中打入:
你好!
如果你的ASP程序中沒有屏蔽html語句,那么就會(huì)改變"你好"字體的大小。在留言本中改變字體大小和貼圖有時(shí)并不是什么壞事,反而可以使留言本生動(dòng)。但是如果在輸入框中寫個(gè) javascript 的死循環(huán),比如:特大新聞
那么其他查看該留言的客人只要移動(dòng)鼠標(biāo)到"特大新聞",上就會(huì)使用戶的瀏覽器因死循環(huán)而死掉。
解決方法和建議:
編寫類似程序時(shí)應(yīng)該做好對此類操作的防范,譬如可以寫一段程序判斷客戶端的輸入,并屏蔽掉所有的 HTML、 Javascript 語句。
五 ASP漏洞分析和解決方法
6、ASP程序密碼驗(yàn)證漏洞
漏洞描述:
很多網(wǎng)站把密碼放到數(shù)據(jù)庫中,在登陸驗(yàn)證中用以下sql,(以asp為例)
sql="select * from user where username='"&username&"'and pass='"& pass &'"
此時(shí),您只要根據(jù)sql構(gòu)造一個(gè)特殊的用戶名和密碼,如:ben' or '1'='1
就可以進(jìn)入本來你沒有特權(quán)的頁面。再來看看上面那個(gè)語句吧:
sql="select * from user where username='"&username&"'and pass='"& pass&'"
此時(shí),您只要根據(jù)sql構(gòu)造一個(gè)特殊的用戶名和密碼,如:ben' or '1'='1
這樣,程序?qū)?huì)變成這樣: sql="select*from username where username="&ben'or'1'=1&"and pass="&pass&"
or 是一個(gè)邏輯運(yùn)算符,作用是在判斷兩個(gè)條件的時(shí)候,只要其中一個(gè)條件成立,那么等式將會(huì)成立.而在語言中,是以1來代表真的(成立).那么在這行語句中,原語句的"and"驗(yàn)證將不再繼續(xù),而因?yàn)?#34;1=1"和"or"令語句返回為真值.。
另外我們也可以構(gòu)造以下的用戶名:
username='aa' or username<>'aa'
pass='aa' or pass<>'aa'
相應(yīng)的在瀏覽器端的用戶名框內(nèi)寫入:aa' or username<>'aa 口令框內(nèi)寫入:aa' or pass<>'aa,注意這兩個(gè)字符串兩頭是沒有'的。這樣就可以成功的騙過系統(tǒng)而進(jìn)入。
后一種方法理論雖然如此,但要實(shí)踐是非常困難的,下面兩個(gè)條件都必須具備。
1. 你首先要能夠準(zhǔn)確的知道系統(tǒng)在表中是用哪兩個(gè)字段存儲用戶名和口令的,只有這樣你才能準(zhǔn)確的構(gòu)造出這個(gè)進(jìn)攻性的字符串。實(shí)際上這是很難猜中的。
2.系統(tǒng)對你輸入的字符串不進(jìn)行有效性檢查。
問題解決和建議:
對輸入的內(nèi)容驗(yàn)證和"'"號的處理。
7、IIS4或者IIS5中安裝有INDEX SERVER服務(wù)會(huì)漏洞ASP源程序
問題描述:
在運(yùn)行IIS4或者IIS5的Index Server,輸入特殊的字符格式可以看到ASP源程序或者其它頁面的程序。甚至以及添打了最近關(guān)于參看源代碼的補(bǔ)丁程序的系統(tǒng),或者沒有.htw文件的系統(tǒng),一樣存在該問題。獲得asp程序,甚至global.asa文件的源代碼,無疑對系統(tǒng)是一個(gè)非常重大的安全隱患。往往這些代碼中包含了用戶密碼和ID,以及數(shù)據(jù)庫的源路徑和名稱等等。這對于攻擊者收集系統(tǒng)信息,進(jìn)行下一步的入侵都是非常重要的。
通過構(gòu)建下面的特殊程序可以參看該程序源代碼:
http://202.116.26.38/null.htw?CiWebHitsFile=/default.asp&CiRestriction=none&CiHiliteType=Full
這樣只是返回一些html格式的文件代碼,但是當(dāng)你添加%20到CiWebHitsFile的參數(shù)后面,如下:
http://someurl/null.htw?CiWebHitsFile=/default.asp%20&CiRestriction=none&CiHiliteType=Full
這將獲得該程序的源代碼。
(注意:/default.asp是以web的根開始計(jì)算。如某站點(diǎn)的http:///welcome/welcome.asp
那么對應(yīng)就是:
http://someurl/null.htw?CiWebHitsFile=/welcome/welcome.asp%20&CiRestriction=none&CiHiliteType=Full
)
由于'null.htw'文件并非真正的系統(tǒng)映射文件,所以只是一個(gè)儲存在系統(tǒng)內(nèi)存中的虛擬文件。哪怕你已經(jīng)從你的系統(tǒng)中刪除了所有的真實(shí)的.htw文件,但是由于對null.htw文件的請求默認(rèn)是由webhits.dll來處理。所以,IIS仍然收到該漏洞的威脅。
問題解決或者建議:
如果該webhits提供的功能是系統(tǒng)必須的,請下載相應(yīng)的補(bǔ)丁程序。如果沒必要,請用IIS的MMC管理工具簡單移除.htw的映象文件。
補(bǔ)丁程序如下:
Index Server 2.0:
Intel:
http://www.microsoft.com/downloads/release.asp?ReleaseID=17727
Alpha:
http://www.microsoft.com/downloads/release.asp?ReleaseID=17728
Indexing Services for Windows 2000:
Intel:
http://www.microsoft.com/downloads/release.asp?ReleaseID=17726
8、ASP聊天室程序的漏洞
問題描述:
如果聊天室ASP程序設(shè)計(jì)不當(dāng),很容易會(huì)給他人利用來做壞事:可以踢人,穿墻,搗亂.
首先,我們看看聊天室里有什么漏洞,大家看看下面這段代碼:
…………………………
………………
………
OnSubmit="return chksend();">
******
********
發(fā)言:?
悄悄:
對象:
表情:
!!!!!!
!!!!
以上這段代碼是我在某個(gè)聊天室用"測試者"作代號登陸后在發(fā)言幀當(dāng)下來的, 這只是一小部份,但在這一小部份代碼里面就有兩個(gè)漏洞。
第一個(gè)漏洞
大家看看上面的代碼加上"*"號的那兩句,其中第一句中的"測試者"就是我登陸的名字,還有,第二句中的"boy"是登陸時(shí)的性別,還有再看看下面我加上"!" 號的兩句,第一句里還是有我登陸時(shí)的名字,這幾句都是我現(xiàn)在想說的兩個(gè)漏洞所在點(diǎn)。如果想在這個(gè)聊天室里穿墻的話,只要把發(fā)言幀的代碼當(dāng)下來另存,把"form"的"action"改成聊天室的地址,然后把再"*"號的第一句的"測試者"兩字改成想要的名字就可以了。也可以變換性別,只要把第二句的 "boy"改成"girl"。這就是所謂的穿墻術(shù)了。你甚至可以把它改成在線人的名字,然后發(fā)言,這樣就冒充別人的姓名談話。
第二個(gè)漏洞
踢人的漏洞就是這個(gè)了,我們看一下帶"!"號的第一句,上面有是合法用戶登陸的名字,再看第二句,他有"getout",再加上上面還有一段"form"標(biāo)簽,這段就是我們退出聊天室時(shí)的代碼,這個(gè)有什么用呢?我們先試試看,首先還是把"form"標(biāo)簽的"action"改成 聊天室的地址,不然就不知道提交給哪個(gè)家伙了。然后把"風(fēng)風(fēng)"改成你想踢下去的人的名字然后單擊"退出",那就把那個(gè)人踢出聊天室了。這個(gè)就是聊天室踢人的漏洞。
這兩個(gè)漏洞主要的原因是這兩個(gè)漏洞使服務(wù)程序不識別客戶發(fā)出的指令是不是合法用戶。 以上兩漏騙服務(wù)程序來更名發(fā)出發(fā)言,或更名退出,使得真正的使用者受害。
當(dāng)然上面的程序中還有一個(gè)漏洞,輸入框沒有對HTML語句和JAVASCRIPT語句做過濾。這個(gè)問題我們在漏洞5中已有詳細(xì)分析,這里就不談了。
問題解決或者建議:
在程序設(shè)計(jì)中讓服務(wù)程序能識別到底是哪個(gè)家伙發(fā)出的指令就可以了,具體做法可以為每個(gè)聊天者發(fā)一個(gè)識別碼,象五筆字一樣,也可以用每個(gè)聊天者的密碼識別,也可以把聊天者的密碼隨機(jī)加密后用作識別等等 ,反正能使你的服務(wù)程序識別到底是誰發(fā)出的指令就可以了。
?