基于網(wǎng)站的安全性研究與實現(xiàn)—計算機畢業(yè)設計_第1頁
基于網(wǎng)站的安全性研究與實現(xiàn)—計算機畢業(yè)設計_第2頁
基于網(wǎng)站的安全性研究與實現(xiàn)—計算機畢業(yè)設計_第3頁
基于網(wǎng)站的安全性研究與實現(xiàn)—計算機畢業(yè)設計_第4頁
基于網(wǎng)站的安全性研究與實現(xiàn)—計算機畢業(yè)設計_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、畢業(yè)設計(論文)基于ASP網(wǎng)站的安全性研究與實現(xiàn)論文作者姓名:申請學位專業(yè):申請學位類別:指導教師姓名(職稱):論文提交日期:基于ASP網(wǎng)站的安全性研究與實現(xiàn)摘 要網(wǎng)絡已經(jīng)影響到社會的政治、經(jīng)濟、文化、軍事和社會生活各個方面。以網(wǎng)絡方式獲取信息和交流已成為現(xiàn)代信息社會的一個重要特征。人們訪問網(wǎng)絡獲取信息最直接的方式就是通過登錄和訪問網(wǎng)站,以獲取可靠的信息。當今大多數(shù)網(wǎng)站使用的是ASP,用戶在登錄以及存儲個人信息時存在著不少安全隱患,因此,本設計是對ASP網(wǎng)站安全性做出進一步的判斷和強化,最大限度的做到保護用戶信息的完整性和保密性,主要涉及到用戶信息的加密解密、防SQL注入式攻擊的安全模塊,另外

2、針對ASP網(wǎng)站的一些漏洞提出一些安全輔助性設計和安全配置。本文對上述安全模塊設計和安全性輔助設計做出了詳細的說明。關(guān)鍵詞:ASP;加密;解密;防SQL注入The Security Study and Implement Based on ASP WebsiteAbstractNetwork has affected the polity, economy, culture, military and each aspect of social life. It has become an important feature of modern society to obtain informa

3、tion and exchange by the use of network. When people access information, the most direct way is logging on and surfing in the Internet to obtain reliable information. Today most of websites are using the ASP. When users are logging on and storing personal information, there are many hidden security

4、problems. So this design will make further judgment and aggrandizement on ASP websites security. It will do the best to protect the integrity of user information and confidentiality. It is mainly related to the encryption and decryption of users information, and defense of SQL injection attack. In a

5、ddition, some auxiliary designs and security configuration are made for some loopholes of the ASP website. The paper describes the design of the security module and subordinate security modules in detail.Key words: ASP; encryption; decryption; defense SQL injection 目 錄論文總頁數(shù):30頁1引言11.1課題背景11.2國內(nèi)外研究現(xiàn)狀

6、11.3本課題研究的目的11.4本課題的研究方法12開發(fā)技術(shù)和環(huán)境22.1RSA加密算法22.1.1 RSA加密算法的發(fā)展22.1.2 RSA加密算法的描述22.1.3 RSA加密算法的可行性22.2ASP技術(shù)22.2.1 ASP技術(shù)的原理22.2.2 ASP技術(shù)的含義32.2.3 ASP技術(shù)的特點32.3結(jié)構(gòu)化查詢語言SQL32.3.1 SQL語言的特點42.3.2 SQL語言的組成42.4開發(fā)環(huán)境43需求分析43.1用戶需求43.2功能需求43.2.1 用戶注冊模塊53.2.2 用戶登錄模塊53.2.3 防SQL注入模塊53.3性能要求63.3.1 操作性能63.3.2 調(diào)用性能64安全模

7、塊的設計與實現(xiàn)64.1安全模塊的實現(xiàn)過程64.1.1 注冊加密模塊實現(xiàn)過程64.1.2 防注入模塊實現(xiàn)過程74.1.3 登錄圖片驗證碼的實現(xiàn)過程74.2模塊流程圖和功能圖74.2.1 注冊加密模塊流程圖和功能圖74.2.2 登錄安全模塊流程圖及功能圖94.3模塊主要代碼及實現(xiàn)114.3.1 注冊模塊的安全代碼及實現(xiàn)114.3.2登錄及防注入模塊的安全代碼及實現(xiàn)185現(xiàn)有安全技術(shù)歸納總結(jié)225.1SQL數(shù)據(jù)庫的安全性225.2IIS的安全配置225.3關(guān)閉沒有用的服務和協(xié)議235.4ASP編程安全235.5ASP服務器的安全設置245.6ASP木馬245.7防止暴力破解256測試256.1測試環(huán)

8、境256.2測試結(jié)果256.2.1 測試效果266.2.2 測試過程及結(jié)果27結(jié) 論27參考文獻28致 謝29聲 明301 引言1.1 課題背景網(wǎng)站資源大體上是以電子數(shù)據(jù)的形式把文字、圖像、聲音、動畫等多種形式的信息存貯在服務器中,并通過計算機、網(wǎng)絡通信終端等方式再現(xiàn)出來的資源。隨著計算機應用水平與網(wǎng)絡的不斷發(fā)展,網(wǎng)站資源呈現(xiàn)出傳統(tǒng)資源所無法比擬的優(yōu)勢:信息的海量化、信息的交互性、共享性、時效性以及信息的安全性等。網(wǎng)站資源是通過計算機網(wǎng)絡來訪問的,而由于計算機網(wǎng)絡高度的互動性和可變性,一定會產(chǎn)生一些人為和非人為的安全性問題?,F(xiàn)在大多數(shù)網(wǎng)站都是用ASP編寫而成的,而涉及這個領域的安全性問題則有待

9、研究。1.2 國內(nèi)外研究現(xiàn)狀自進入信息化時代以來,網(wǎng)站資源迅速發(fā)展,信息業(yè)的發(fā)展帶動了經(jīng)濟的發(fā)展,但正是這點使得黑客技術(shù)日益公開化、職業(yè)化,各種攻擊日益頻繁,病毒日益泛濫,網(wǎng)站安全事件日益增多,用戶的防范意識也同時迅速提高,使得市場需求大幅增加,刺激了國內(nèi)網(wǎng)站安全產(chǎn)品市場快速發(fā)展。隨著國家對信息安全的逐年重視,電子政務、電信、銀行等國有大型企業(yè)信息化的實施,對網(wǎng)站安全市場發(fā)展也起到了重要的推動作用,國家在網(wǎng)站安全方面的投資有逐年增加的趨勢,世界也對網(wǎng)站安全越來越重視,安全問題必將迎來一場新的革命。1.3 本課題研究的目的現(xiàn)今,訪問網(wǎng)站資源已是廣大公眾的日常行為,作為一個計算機網(wǎng)絡用戶來說要求信

10、息是具有實效性和真實性的,因此網(wǎng)上信息的安全性和保密性是一個至關(guān)重要的話題,本設計主要是針對用戶信息的安全保密性、SQL注入式攻擊的有效防止方法做進一步的研究,還有就是對于現(xiàn)今網(wǎng)站資源存在的一些安全漏洞做出相應的研究和安全配置,達到促使ASP網(wǎng)站安全的目的。本設計的中心思想是幫合法的ASP網(wǎng)站做出幾個用于其安全的安全模塊,可以直接調(diào)用,其次是提出一些用于ASP網(wǎng)站的意見,以用于增加其的安全性,達到ASP網(wǎng)站安全的目的。1.4 本課題的研究方法本課題總體思想是結(jié)合書本和實際對ASP網(wǎng)站安全性做出一些規(guī)劃性意見,能直觀有效的看待現(xiàn)今網(wǎng)站安全的一些問題所在;再者就是設計幾個用于ASP網(wǎng)站信息安全的模

11、塊(用于用戶注冊信息和客戶端非法參數(shù)提交進行加密的RSA算法加密模塊、用戶登錄的圖片驗證碼模塊和一種常見的防SQL注入模塊),使用戶可以直接調(diào)用,具有簡潔方便的特性,以達到增強ASP網(wǎng)站安全性的目的。2 開發(fā)技術(shù)和環(huán)境2.1 RSA加密算法2.1.1 RSA加密算法的發(fā)展RSA公開密鑰加密算法是 在20世紀70年代提出的,到現(xiàn)在已經(jīng)得到了廣泛認可和應用。到21世紀,網(wǎng)絡或電子安全領域的各方面已經(jīng)發(fā)展了較為完備的國際規(guī)范標準,RSA加密算法作為最重要的公開密鑰算法,在各領域得到了廣泛的應用。2.1.2 RSA加密算法的描述RSA算法可以描述如下:1、選取兩個保密的大素數(shù)p和q,令n=p×

12、;q,(n)=(p-1)(q-1), (n)為n的歐拉函數(shù)值,也就是所說的模;2、取與(p-1)×(q-1)互素的整數(shù)e,由方程d×e=1 (mod (p-1)×(q-1)解出d;3、二元組(e,n)作為公開密鑰,二元組(d,n)作為私有密鑰<加密解密>b=ae mod n,c=bd mod n(其中a為明文,c為密文)2.1.3 RSA加密算法的可行性雖然RSA加密運算的速度比較慢,但是在PC性能發(fā)展越來越好的今天,對于幾千字節(jié)的數(shù)據(jù)進行一次幾百位密鑰的RSA加密,所消耗的時間應該是可以接受的。下面結(jié)合大數(shù)運算程序的調(diào)試,從理論上簡單的分析消耗時間。

13、在一臺普通配置的PC機上對一個整數(shù)進行冪模運算,因為公開密鑰的e通常取的較小,所以指數(shù)取一個小整數(shù),比如C353,模一個70字節(jié)長的整數(shù)(140位十六進制,大數(shù)單元以線性組方式實現(xiàn),對應到RSA算法中,這相當于約560bit的n),調(diào)試一個函數(shù)測試,按初等數(shù)論中的知識對程序進行算法優(yōu)化,最終在一臺配置為AMD Athron2800+,外頻333MHZ,物理內(nèi)存512MB的PC上測試需要約45毫秒時間。如果按這種速度,逐字節(jié)對1KB的數(shù)據(jù)進行同樣的運算,所消耗的時間理論上為45毫秒的1024倍即約45秒。這個時間并不是非常長。2.2 ASP技術(shù)2.2.1 ASP技術(shù)的原理ASP技術(shù)的原理首先是客

14、戶端向服務器端提出HTTP的請求,然后IIS接受其客戶斷提出的請求,隨后調(diào)用ASP引擎,由此得出相應的ASP文件并且執(zhí)行JavaScript或VBScript,最后通ActiveX組件ADO訪問數(shù)據(jù)庫,然后根據(jù)數(shù)據(jù)庫的結(jié)果自動生成HTML頁面直接去響應客戶發(fā)出的的請求。其原理圖如圖1:圖1ASP技術(shù)原理圖2.2.2 ASP技術(shù)的含義1、Active:ASP運用了微軟公司的ActiveX技術(shù),ActiveX技術(shù)是現(xiàn)在Microsoft軟件的一項重要基礎,它采用封裝對象和程序調(diào)用對象的技術(shù),這樣可以簡化編程以加強程序間合作。ASP本身封裝了一些基本的組件和常用組件,許多公司也開發(fā)了很多實用組件。只

15、要可以在服務器上安裝這些組件,通過訪問組件便可以快速地建立自己的WEB應用。2、Server:ASP運行在服務器端,這樣就不必擔心瀏覽器是否支持ASP所使用的編程語言。ASP的編程語言可以是VBScript和JavaScript。VBScript是VB的一個簡集,會VB的人可以很方便的快速上手。然而Netscape瀏覽器不支持客戶端的VBScript,所以,看到的是ASP生成的HTML代碼,而不是ASP程序代碼。這樣就可以防止別人抄襲程序。2.2.3 ASP技術(shù)的特點1、使用VBScript 、JavaScript等簡單易懂的腳本語言的同時結(jié)合HTML代碼,可迅速地完成網(wǎng)站的應用程序。2、不用

16、去編譯,容易編寫,可以在服務器端直接執(zhí)行。3、與瀏覽器無關(guān),用戶端只需要使用可執(zhí)行HTML碼的瀏覽器,便可瀏覽ASP所設計的網(wǎng)頁內(nèi)容。ASP所使用的腳本語言VBScript 和JavaScript均在WEB服務器端執(zhí)行,用戶端的瀏覽器不需要執(zhí)行這些腳本語言。4、ASP可以與任何ActiveX scripting語言相容。除了可使用VBScript或JavaScript語言來設計外,還可以通過plug-in的方式,使用由第三方所提供的其他腳本語言。5、ASP的源程序不會被傳到客戶瀏覽器,因此可以避免所寫的源程序被他人竊取和修改,這樣也就提高了程序的相對安全性。2.3 結(jié)構(gòu)化查詢語言SQLSQL全

17、稱是“結(jié)構(gòu)化查詢語言(Structured Query Language)”,最早的是IBM的圣約瑟研究實驗室為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEM R開發(fā)的一種查詢語言,它的前身是SQUARE語言。SQL語言結(jié)構(gòu)簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。2.3.1 SQL語言的特點1、一體化的語言風格:此項包括數(shù)據(jù)庫的創(chuàng)建、更改、查詢、定義模式、查詢數(shù)據(jù)庫以及維護數(shù)據(jù)庫和安全控制等,為數(shù)據(jù)庫提供了良好的開發(fā)環(huán)境。2、高度非過程化:在運用SQL語言訪問數(shù)據(jù)庫時,用戶不必一步一步去告訴計算機怎么去工作,而是告訴它要完成什么,也就是說可以直接交給系統(tǒng)

18、由系統(tǒng)自動去完成。3、語言簡潔明了:SQL語言的命令不是很多且語法簡單,是一種描述性語言,因此易學易懂。4、使用方式較多:SQL語言可以以命令方式交互使用,也可以嵌入到程序設計語言中使用。目前很多開發(fā)工具都將SQL語言直接融入到自身的語言中,使用起來非常方便。2.3.2 SQL語言的組成SQL語言按其功能,可分為以下幾個組成部分:1、數(shù)據(jù)定義語言:實現(xiàn)定義、修改和刪除數(shù)據(jù)庫對象的功能。2、數(shù)據(jù)操縱語言:實現(xiàn)查詢數(shù)據(jù)的功能。3、數(shù)據(jù)控制語言:實現(xiàn)控制用戶對數(shù)據(jù)庫的操作權(quán)限的功能。4、數(shù)據(jù)查詢語言:實現(xiàn)查詢數(shù)據(jù)庫的功能。2.4 開發(fā)環(huán)境本設計的開發(fā)環(huán)境為個人計算機一臺,Windows2003系統(tǒng),

19、SQL SERVER 2000數(shù)據(jù)庫等相關(guān)軟件。3 需求分析3.1 用戶需求作為一個訪問網(wǎng)站資源的用戶來說,個人信息的保密性和完整性是最重要的,進而要求網(wǎng)站最大限度的安全。因此,首先需要設計出幾個基于ASP網(wǎng)站的安全模塊,其次是需要了解一些關(guān)于網(wǎng)站或數(shù)據(jù)庫安全的輔助說明和一些安全配置問題。要求可直接在ASP網(wǎng)站中調(diào)用這些模塊,并且具有實用、簡潔的功能。3.2 功能需求系統(tǒng)功能主要包括以下幾個方面:一是用戶注冊加密信息,用戶注冊時用RSA算法加密后直接存入數(shù)據(jù)庫; 二是登錄模塊設計,主要采用了驗證碼技術(shù),從而可以防止不法用戶用軟件頻繁注冊,頻繁發(fā)送不良信息等。 三是防SQL注入模塊,是對客戶端提

20、交的變量參數(shù)進行仔細地檢測。對客戶端提交的變量進行檢查以防止SQL注入,有各種方法,發(fā)現(xiàn)客戶端提交的參數(shù)中有“exec、insert、select、delete、from、update、count、user、add、net”等用于SQL注入的常用字符時,立即停止執(zhí)行ASP并給出警告信息或轉(zhuǎn)向出錯頁面。本設計的用戶主要是針對合法的ASP網(wǎng)站,幫助他們實現(xiàn)網(wǎng)站安全性能。在使用時其可以直接調(diào)用本設計的安全模塊,達到用戶信息的完整性,保密性和不可否認性。3.2.1 用戶注冊模塊本模塊主要用于用戶注冊信息的安全性,用戶注冊時用RSA加密算法直接加密用戶信息存入數(shù)據(jù)庫,用戶注冊信息包括用戶名、密碼、確認密

21、碼、聯(lián)系 、郵箱、QQ、公司名稱和補充說明。用戶注冊時如有填錯注冊信息,則轉(zhuǎn)入錯誤頁面以引導用戶填寫正確的注冊信息,比如密碼輸入不一致,QQ不為數(shù)字或郵箱格式輸入有錯誤。如用戶填寫所有信息均符合要求則注冊成功,此模塊對用戶信息采用RSA加密算法進行加密后存入數(shù)據(jù)庫。在數(shù)據(jù)庫里可看到亂碼的注冊信息,他人想通過數(shù)據(jù)庫查看用戶信息是不可行的,也就起到了保密的作用。3.2.2 用戶登錄模塊此模塊采用圖片驗證碼的形式以增強用戶登錄的安全性。所謂驗證碼,就是將一串隨機產(chǎn)生的數(shù)字或符號,生成一幅圖片,圖片里加上一些干擾象素,用戶肉眼識別其中的驗證碼信息,輸入表單提交網(wǎng)站驗證,驗證成功后才能使用某項功能。驗證

22、碼一般放在會員注冊、留言本等所有客戶端提交信息的頁面,要提交信息,必須要輸入正確的驗證碼,從而可以防止不法用戶用軟件頻繁注冊,頻繁發(fā)送不良信息等。普通的客戶端交互,如留言本、會員注冊等僅是按照要求輸入內(nèi)容,但網(wǎng)上有很多攻擊軟件,如注冊機,可以通過瀏覽WEB,掃描表單,然后在系統(tǒng)上頻繁注冊,頻繁發(fā)送不良信息,造成不良的影響,或者通過軟件不斷的嘗試,盜取你的密碼。我們通過使用驗證碼技術(shù),使客戶端輸入的信息都必須經(jīng)過驗證,從而可以解決這個問題,以達到相應的安全目標。3.2.3 防SQL注入模塊本模塊是對客戶端提交的變量參數(shù)進行仔細地檢測以防止SQL注入,當發(fā)現(xiàn)客戶端提交的參數(shù)中有“exec、inse

23、rt、select、delete、from、update、count、user、add、net”等用于SQL注入的常用字符時,立即停止執(zhí)行ASP并給出警告信息或轉(zhuǎn)向出錯頁面,同時對客戶端提交的非法參數(shù)加密后存入數(shù)據(jù)庫。另外此模塊實現(xiàn)了RSA算法的解密功能,管理員在登錄后可查看解密了的非法注入信息,包括注入詳細信息和注入時間。3.3 性能要求3.3.1 操作性能模塊應當操作比較簡便,界面比較直觀,維護比較簡便。管理員登錄后可很直觀的查看注入日志。3.3.2 調(diào)用性能其他ASP網(wǎng)站用戶調(diào)用此模塊時應簡便快捷。4 安全模塊的設計與實現(xiàn)4.1 安全模塊的實現(xiàn)過程4.1.1 注冊加密模塊實現(xiàn)過程一個網(wǎng)站

24、的安全管理最主要的部分就是用戶個人信息的保密性和完整性,在此模塊中主要的調(diào)用RSA加密算法對用戶注冊的重要信息加密保存,用戶寫入注信息時首先驗證用戶信息格式的合法性,用戶信息輸入全為合法時調(diào)用RSA加密算法對其進行加密后存入數(shù)據(jù)庫。先調(diào)用GENKEY()函數(shù)產(chǎn)生公鑰和私鑰和模,然后調(diào)用Encode(pStrMessage)對用戶信息進行加密,生成的密文以亂碼的字符串存入數(shù)據(jù)庫。例如加密用戶名:加密過程:Set ObjUserName = New clsRSA 以上為先定義1個clsRSA對象。Call ObjUserName.GenKey() 以上為取得隨機密鑰。 LngKeyUserName

25、1 = ObjUserName.PublicKey 'Public Key 以上為取得公鑰。LngKeyUserName2 = ObjUserName.PrivateKey'Private Key以上為取得私鑰。LngKeyUserName3 = ObjUserName.Modulus 'Modulus 以上為取得模。StrUserName = ObjUserName.Encode(userName) 以上為將userName加密。最后將密文和生成的密鑰存入數(shù)據(jù)庫。此時整個加密過程完成。解密過程:把公鑰,私鑰,模從數(shù)據(jù)庫中讀出。ObjUserName = New cls

26、RSA以上為先定義1個clsRSA對象。ObjUserName. PublicKey = str1(1) 設置公鑰。ObjUserName.PrivateKey = str1(1) 以上為設置私鑰。ObjUserName.Modulus = str1(2) 以上為設置模型密文。StrUserName = ObjUserName.Decode(UserName) 以上為將userName解密。 4.1.2 防注入模塊實現(xiàn)過程 防注入模塊的功能實現(xiàn)體現(xiàn)在注冊頁面上,當客戶端提交非法信息進行非法注入時,系統(tǒng)會對客戶端提交的非法參數(shù)進行加密,加密后存入數(shù)據(jù)庫。當客戶端進行非法注入時,首先調(diào)用GENKE

27、Y()函數(shù)產(chǎn)生雙鑰和模,然后調(diào)用Encode(pStrMessage)對非法信息進行加密,生成的密文存入數(shù)據(jù)庫,管理員登錄時候調(diào)用Dncode(pStrMessage)進行解密,通過瀏覽器顯示注入信息。4.1.3 登錄圖片驗證碼的實現(xiàn)過程用戶登錄時候登錄界面的 GetSafeCode函數(shù)去調(diào)用function.asp頁面,這為了顯示整個隨機數(shù)字圖片,然后GetSafeCode函數(shù)又去調(diào)用Safecode.asp頁面,這是為了取得隨機數(shù)字圖片,并將隨機數(shù)字放入到Session會話中。Safecode.asp又使用canvas.asp來產(chǎn)生隨機圖片及其顏色,canvas.asp又使用font.as

28、p來產(chǎn)生了產(chǎn)生隨機數(shù)及其字體。4.2 模塊流程圖和功能圖4.2.1 注冊加密模塊流程圖和功能圖1、注冊加密模塊流程圖及說明用戶進行注冊時首先顯示注冊頁面,顯示為必須進行填寫的個人信息的對話框,包括ID、PASSWORD、TEL、QQ、E-mail等,此時用戶需輸入要注冊的個人信息,模塊會根據(jù)用戶輸入的合法性進行檢測,如有錯誤輸入則彈出對話框提示,用戶單擊“確定”按鈕后返回輸入框重新輸入。所有信息判斷為合法時對其進行加密并存入數(shù)據(jù)庫,即注冊結(jié)束,流程圖如圖2:圖2 注冊加密模塊流程圖2、注冊加密模塊實現(xiàn)圖及說明注冊加密界面的實現(xiàn)由register.asp頁面體現(xiàn),注冊時需提交用戶名、密碼、確認密

29、碼、聯(lián)系 、郵箱、QQ、公司名稱、補充說明,實現(xiàn)如圖3: 圖3 注冊界面實現(xiàn)圖如用戶提交信息有錯誤或未全部填寫則轉(zhuǎn)出信息提示,例如郵件地址不正確,則提示為非法,實現(xiàn)如圖4:圖4 錯誤信息實現(xiàn)圖當用戶注冊信息全為合法時候?qū)ζ溥M行加密后存入數(shù)據(jù)庫,如圖5:圖5 注冊信息加密圖4.2.2 登錄安全模塊流程圖及功能圖1、登錄安全模塊流程圖及說明用戶登錄時首先進入登錄界面,此時需要輸入用戶名和密碼,然后輸入隨機生成的驗證碼,模塊會對用戶輸入信息進行仔細的檢測,看是否有非法字符輸入,如果有立即對非法數(shù)據(jù)進行加密并存入數(shù)據(jù)庫后返回登錄界面。如是合法用戶信息,則判斷是否為管理員,如是普通用戶可正常登錄并顯示無

30、權(quán)查看注入信息,如是管理員登錄則可直接查看解密了的注入日志,流程圖如圖6:開始進入登錄界面判斷合法性用戶登錄判斷用戶權(quán)普通用戶登錄結(jié)束登錄后查看注入日志NY管理員普通用戶 加密非法信息并返回圖6 登錄安全模塊流程圖2、登錄安全模塊功能圖及說明登錄安全模塊界面由login.asp頁面體現(xiàn),登錄時需要提交合法的用戶名、密碼和注冊碼,實現(xiàn)如圖7:圖7 登錄界面實現(xiàn)圖輸入非法的用戶名“select”和密碼“1234567890”,實現(xiàn)SQL非法注入,示例如圖8:圖8 實現(xiàn)非法注入示例圖此時模塊檢測到用戶注冊信息含有非法字符自動終止轉(zhuǎn)入錯誤提示頁面,如圖9:圖9 注入終止信息圖含有非法字符的注冊信息加密

31、后存入數(shù)據(jù)庫文件中,如圖10:圖10 非法信息加密圖管理員登錄查看注入日志(包括解密了的用戶名和密碼,此外還包括確切的注入時間),如圖11: 圖11 非法注入信息解密圖4.3 模塊主要代碼及實現(xiàn)4.3.1 注冊模塊的安全代碼及實現(xiàn)本模塊主要由register.asp來實現(xiàn),其主要安全代碼和實現(xiàn)如下:1、RSA加密解密代碼實現(xiàn)如下:Class clsRSAPublic PrivateKeyPublic PublicKeyPublic ModulusPublic Sub GenKey()以上函數(shù)是獲取密鑰。Dim lLngPhiDim qDim pRandomizeDoDo' 2 rand

32、om primary numbers (0 to 1000)Dop = Rnd * 1000 1Loop While Not IsPrime(p)Doq = Rnd * 1000 1Loop While Not IsPrime(q)' n = product of 2 primesModulus = p * q 1' random decryptor (2 to n)PrivateKey = Rnd * (Modulus - 2) 1 + 2lLngPhi = (p - 1) * (q - 1) 1PublicKey = Euler(lLngPhi, PrivateKey)Lo

33、op While PublicKey = 0 Or PublicKey = 1' Loop if we can't crypt/decrypt a byte Loop While Not TestCrypt(255)End SubPrivate Function TestCrypt(ByRef pBytData)Dim lStrCryptedlStrCrypted = Crypt(pBytData, PublicKey)TestCrypt = Crypt(lStrCrypted, PrivateKey) = pBytDataEnd FunctionPrivate Functio

34、n Euler(ByRef pLngPHI, ByRef pLngKey)Dim lLngR(3)Dim lLngP(3)Dim lLngQ(3)Dim lLngCounterDim lLngResultEuler = 0lLngR(1) = pLngPHI: lLngR(0) = pLngKeylLngP(1) = 0: lLngP(0) = 1lLngQ(1) = 2: lLngQ(0) = 0lLngCounter = -1Do Until lLngR(0) = 0lLngR(2) = lLngR(1): lLngR(1) = lLngR(0)lLngP(2) = lLngP(1): l

35、LngP(1) = lLngP(0)lLngQ(2) = lLngQ(1): lLngQ(1) = lLngQ(0)lLngCounter = lLngCounter + 1lLngR(0) = lLngR(2) Mod lLngR(1)lLngP(0) = (lLngR(2)lLngR(1) * lLngP(1) + lLngP(2)lLngQ(0) = (lLngR(2)lLngR(1) * lLngQ(1) + lLngQ(2)LooplLngResult = (pLngKey * lLngP(1) - (pLngPHI * lLngQ(1)If lLngResult > 0 Th

36、enEuler = lLngP(1)ElseEuler = Abs(lLngP(1) + pLngPHIEnd IfEnd FunctionPublic Function Crypt(pLngMessage, pLngKey)On Error Resume NextDim lLngModDim lLngResultDim lLngIndexIf pLngKey Mod 2 = 0 ThenlLngResult = 1For lLngIndex = 1 To pLngKey / 2lLngMod = (pLngMessage 2) Mod Modulus' Mod may error o

37、n key generationlLngResult = (lLngMod * lLngResult) Mod Modulus If Err Then Exit FunctionNextElselLngResult = pLngMessageFor lLngIndex = 1 To pLngKey / 2lLngMod = (pLngMessage 2) Mod ModulusOn Error Resume Next' Mod may error on key generationlLngResult = (lLngMod * lLngResult) Mod ModulusIf Err

38、 Then Exit FunctionNextEnd IfCrypt = lLngResultEnd FunctionPrivate Function IsPrime(ByRef pLngNumber)Dim lLngSquareDim lLngIndexIsPrime = FalseIf pLngNumber < 2 Then Exit FunctionIf pLngNumber Mod 2 = 0 Then Exit FunctionlLngSquare = Sqr(pLngNumber)'Sqror lLngIndex = 3 To lLngSquare Step 2If

39、pLngNumber Mod lLngIndex = 0 Then Exit FunctionNextIsPrime = TrueEnd FunctionPublic Function Encode(ByVal pStrMessage)以上函數(shù)為加密函數(shù)。Dim lLngIndexDim lLngMaxIndexDim lBytAsciiDim lLngEncryptedlLngMaxIndex = Len(pStrMessage)If lLngMaxIndex = 0 Then Exit FunctionFor lLngIndex = 1 To lLngMaxIndexlBytAscii =

40、 Asc(Mid(pStrMessage, lLngIndex, 1)lLngEncrypted = Crypt(lBytAscii, PublicKey)Encode = Encode & NumberToHex(lLngEncrypted, 4)NextEnd FunctionPublic Function Decode(ByVal pStrMessage)以上函數(shù)為解密函數(shù)。Dim lBytAsciiDim lLngIndexDim lLngMaxIndexDim lLngEncryptedDataDecode = ""if pStrMessage<&g

41、t;""thenlLngMaxIndex = Len(pStrMessage)end ifFor lLngIndex = 1 To lLngMaxIndex Step 4lLngEncryptedData = HexToNumber(Mid(pStrMessage, lLngIndex, 4)lBytAscii = Crypt(lLngEncryptedData, PrivateKey)Decode = Decode & Chr(lBytAscii)NextEnd FunctionPrivate Function NumberToHex(ByRef pLngNumb

42、er, ByRef pLngLength)NumberToHex = Right(String(pLngLength, "0") & Hex(pLngNumber), pLngLength)End FunctionPrivate Function HexToNumber(ByRef pStrHex)HexToNumber = CLng("&h" & pStrHex)End FunctionEnd Class%>2、輸入注冊信息并判斷合法性的代碼如下:主要采用的JS驗證<script type="text/ja

43、vascript"><!function Trim(str)return str.replace(/( t+)|( t+$)/g,""); 以上代碼實現(xiàn)了JS驗證符號的功能。 function ValidateEmail(str) var emailReg=/(a-zA-Z0-9_-.+)(0-91,3.0-91,3.0-91,3.)|(a-zA-Z0-9-+.)+)(a-zA-Z2,4|0-91,3)(?)$/;return emailReg.test(str); 以上代碼實現(xiàn)了JS驗證電子郵件的功能。function check()userName

44、=Trim(document.getElementById("userName").value)if(userName.length<1)alert("請?zhí)顚懹脩裘?quot;);document.getElementById("userName").focus();document.getElementById("userName").select();return false; 以上代碼實現(xiàn)了JS驗證用戶名是否為空的功能。 此外JS驗證還驗證了密碼是否為空、二次密碼是否為空、密碼是否超過了6位、兩次密碼是否相同、

45、 號碼是否為空、郵件是否為空、郵件格式是否正確、QQ是否為空、QQ是否為數(shù)字、公司名稱是否為空、補充說明是否為空、補充說明是否超過了500字,其原理和上述用戶名相同。如有注冊信息錯誤,其效果如圖12所示:圖12 錯誤信息輸入效果圖3、將信息加密并存入數(shù)據(jù)庫代碼如下:<%if request("check")="YES" then上述代碼表示當請求標志“check”驗證成功后。forsqlform() userName=Replace_Text(request("userName")passWord=Replace_Text(re

46、quest("PassWord")yourTel=Replace_Text(request("yourTel")yourEmail=Replace_Text(request("yourEmail")yourQQ=Replace_Text(request("yourQQ")yourName=Replace_Text(request("yourName")txtContent=Replace_Text(request("txtContent")以上代碼是將提交后在字段格式化后存入

47、變量。popedom=0以上表示權(quán)限為0。messageType=1以上將信息類型設置為1。 Set ObjUserName = New clsRSACall ObjUserName.GenKey() LngKeyUserName1 = ObjUserName.PublicKey 'Public KeyforID = Replace_Text(LngKeyUserName1)LngKeyUserName2 = ObjUserName.PrivateKey'Private KeyLngKeyUserName3 = ObjUserName.Modulus 'ModulusS

48、trUserName = ObjUserName.Encode(userName)str1=LngKeyUserName1&","&LngKeyUserName2&","&LngKeyUserName3'密碼Set ObjPassWord = New clsRSACall ObjPassWord.GenKey()LngKeyPassWord1 = ObjPassWord.PublicKey LngKeyPassWord2 = ObjPassWord.PrivateKeyLngKeyPassWord3 = ObjPa

49、ssWord.Modulus StrPassWord = ObjPassWord.Encode(passWord)str2=LngKeyPassWord1&","&LngKeyPassWord2&","&LngKeyPassWord3其 、電子郵件、QQ、公司名稱和補充說明加密算法同上。sqlOne="insert into Search(S1,S2,S3,S4,S5,S6,S7,FORID) values('"&str1&"','"&

50、str2&"','"&str3&"','"&str4&"','"&str5&"','"&str6&"','"&str7&"','"&forID&"')以上代碼表示插入KEY的SQL命令。sqlTwo="insert into Register(User

51、Name,PassWord,YourTel,YourEmail,YourQQ,YourName,YourContent,Popedom,Type,DATEANDTIME,FORID) values('"&StrUserName&"','"&StrPassWord&"','"&StrYourTel&"','"&StrYourEmail&"','"&StrYourQQ

52、&"','"&StrYourName&"','"&StrTxtContent&"',"&popedom&","&messageType&",'"&now()&"','"&forID&"')"以上代碼表示插入加密信息的SQL命令。conn.execute(sqlTwo)conn.exe

53、cute(sqlOne) 以上代碼是將將加密后信息存入文檔。response.Write "<font color=#FF0000>注冊成功</font><a href=login.asp>現(xiàn)在登錄</a>"conn.closeset conn=nothingelse%><a href="login.asp">返回登錄</a><%End if%>4.3.2登錄及防注入模塊的安全代碼及實現(xiàn)1、檢驗輸入合法性的代碼如下:(1)利用JS驗證輸入格式是否正確利用JS驗證輸入

54、格式的原理與注冊模塊JS驗證原理相同,故不再寫入說明。(2)驗證是否為SQL注入if request("check")="OK" then'response.write(Replace_Text(request("passCode")'response.endif Replace_Text(request("passCode")<>"" thenif Cint(Replace_Text(request("passCode")<>Sess

55、ion("SafeCode") thenresponse.write"<div algin=center width=300 height=20 style=""font-size:12px;""><font color=red><b>驗證碼錯誤,請重新輸入</b></font><br></div>"elseforsqlform()以上代碼主要是調(diào)用此函數(shù)將SQL代碼過濾出來并且保存。(3)驗證權(quán)限看是否能登錄查看SQL注入set

56、rs=server.CreateObject("adodb.recordset")UserNameInput=Replace_Text(request("userName")PassWordInput=Replace_Text(request("passWord")sql="select * from Register as r,Search as s where r.FORID=s.FORID and r.Type=1"rs.open sql,conn,1,3if not (rs.eof and rs.bof)

57、thenif rs("Popedom")=1 thendo while not rs.eof UserName=rs("UserName")PassWord=rs("PassWord")str1=split(rs("s1"),",")str2=split(rs("s2"),",")Set ObjUserName = New clsRSAObjUserName.PrivateKey = str1(1)ObjUserName.Modulus = str1(2)

58、StrUserName = ObjUserName.Decode(UserName)Set ObjPassWord = New clsRSAObjPassWord.PrivateKey = str2(1)ObjPassWord.Modulus = str2(2)StrPassWord = ObjPassWord.Decode(PassWord)if UserNameInput=StrUserName and PassWordInput=StrPassWord thenresponse.Redirect("Input.asp") end ifrs.movenextloopel

59、seresponse.Write("<div style=""font-size:12px;color:#FF0000;"" align=""center"">你無權(quán)查看注入信息</di>")end ifend ifend if2、查看注入日志的代碼和實現(xiàn)如下:主要的功能是先看登錄網(wǎng)頁者是否具有權(quán)限,然后將數(shù)據(jù)庫中信息解密并且顯示出來,主要代碼如下:<%set rs=server.CreateObject("ADODB.Recordset")sq

60、l="SELECT * FROM Register as r,Search as s where r.FORID=s.FORID and r.type=0" 以上代碼是從數(shù)據(jù)庫里查詢非法注入。rs.open sql,conn,1,3if rs.eof thenresponse.write "<div style=""font-size:12px;"" align=""center"">暫無非法注入日志!<a href=""#"" onclick=""history.back()"">返回</a></div>" response.end els

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論