摘要:程序設(shè)計(jì)在線測(cè)試平臺(tái)(簡(jiǎn)稱OJ)是程序設(shè)計(jì)類課程訓(xùn)練、比賽、測(cè)試中支撐平臺(tái)。由于它的開放性,存在著許多不安全的因素。本文探討了OJ平臺(tái)網(wǎng)頁(yè)等方面存在的安全問(wèn)題,以及防衛(wèi)的措施。
【關(guān)鍵詞】程序設(shè)計(jì) 在線測(cè)評(píng) 網(wǎng)頁(yè)安全
在線測(cè)試平臺(tái)是對(duì)網(wǎng)頁(yè)提交的代碼進(jìn)行實(shí)時(shí)判斷,并給出判斷結(jié)果的平臺(tái)。是學(xué)習(xí)程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)、算法分析等課程的支撐工具。目前,大多數(shù)的的院校都有自己的OJ平臺(tái)。由于平臺(tái)在網(wǎng)絡(luò)上的開放性,因此存在著很多安全問(wèn)題。
三明學(xué)院的的在線測(cè)試平臺(tái)安裝在Windows Server 2008的系統(tǒng)中,使用Tomcar開發(fā),采用Mysql數(shù)據(jù)庫(kù)。目前該系統(tǒng)不僅可以提供平時(shí)的在線測(cè)試功能,還可以處理作業(yè)統(tǒng)計(jì)、考試、競(jìng)賽等。這個(gè)系統(tǒng)自從使用以來(lái)經(jīng)歷了數(shù)不清的攻擊,系統(tǒng)幾次崩潰、幾次重裝。出現(xiàn)的問(wèn)題不勝枚舉。比如服務(wù)器被攻擊、數(shù)據(jù)庫(kù)被刪除或修改、網(wǎng)頁(yè)上的功能被去除、服務(wù)器內(nèi)的信息被盜等等。下面對(duì)其中的一些攻擊進(jìn)行討論。
1 SQL注入攻擊
所謂SQL注入攻擊,就是攻擊者通過(guò)修改前端頁(yè)面表單入?yún)?,增加額外的SQL元素來(lái)達(dá)到欺騙數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行惡意SQL的一種攻擊方式,就其本質(zhì)而言,它利用的工具是SQL的語(yǔ)法,針對(duì)應(yīng)用程序開發(fā)者在編程過(guò)中的漏洞,通過(guò)在應(yīng)用程序預(yù)先定義好的SQL語(yǔ)句中追加惡意的SQL元素來(lái)達(dá)到攻擊的目的。
SQL注入攻擊是目前互聯(lián)網(wǎng)最常見也是影響非常廣泛的一種攻擊手段,主要危害:
(1)數(shù)據(jù)庫(kù)信息泄露:數(shù)據(jù)庫(kù)敏感信息被竊取,比如用戶密碼等;
(2)網(wǎng)頁(yè)被篡改:通過(guò)操縱數(shù)據(jù)庫(kù)內(nèi)容篡改網(wǎng)頁(yè)顯示;
(3)網(wǎng)站被掛馬:修改數(shù)據(jù)庫(kù)一些特定字段,嵌入網(wǎng)馬鏈接,進(jìn)行掛馬攻擊。
下面通過(guò)舉例的方式來(lái)說(shuō)明SQL注入攻擊的原理。
假設(shè)我們有一個(gè)后臺(tái)登錄功能,正常要求輸入用戶名和密碼才能夠登錄。然后處理登錄的代碼的邏輯大致如下:
(1)獲取前端輸入的參數(shù)用戶名和密碼,假設(shè)分別為jiaye和123456;
(2) 通過(guò)SQL“String sql=”select*from user where name=”+name+ "andpassword=""+password+""”來(lái)查詢,如果結(jié)果存在說(shuō)明用戶名和密碼正確,允許用戶登錄。
通過(guò)上面的邏輯,正常情況用戶必須輸入正確的賬號(hào)和密碼才能夠登錄。但是如果代碼存在SQL注入漏洞,那么攻擊者可以通過(guò)精心構(gòu)造前端頁(yè)面的入?yún)?,?lái)達(dá)到及時(shí)輸入錯(cuò)誤的密碼也能夠登錄。
比如用戶名輸入jiaye,密碼這時(shí)輸入“111'or name= 'jiaye”,那么登錄后臺(tái)拼接的SQL就變成“select 4 from user where name= 'jiaye'and password=111' or name= 'jiaye'”,這樣就等于不需要驗(yàn)證密碼即可登錄了。
這里只是一個(gè)簡(jiǎn)單的例子,實(shí)際中,攻擊者可以通過(guò)數(shù)據(jù)庫(kù)中一些特殊的SQL語(yǔ)句,很容易的就可以獲取數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)、數(shù)據(jù)等。
通過(guò)上面的例子,大家應(yīng)該對(duì)SQL注入原理及其危害有進(jìn)一步的了解。那我們應(yīng)該怎么避免在網(wǎng)站中產(chǎn)生SQL注入漏洞呢?
(1)通過(guò)對(duì)特殊字符做過(guò)濾,比如上面的例子中,通過(guò)對(duì)分號(hào)做轉(zhuǎn)義即可避免被注入。但是極不推薦這種做法,所謂魔高一尺道高一丈,開發(fā)者很難考慮到所有的注入方式來(lái)過(guò)濾所有的特殊字符。
(2)通過(guò)預(yù)編譯的方式來(lái)執(zhí)行SQL,以java來(lái)說(shuō)明,比如上面的例子中,我們把SQL修改為“String sql="select+ from userWherename=?and password=?””,然后逐個(gè)的設(shè)置參數(shù)并執(zhí)行。通過(guò)預(yù)編譯的方式來(lái)執(zhí)行SQL是一種簡(jiǎn)單而有效的避免SQL注入的方法。
2 文件上傳與下載漏洞
文件的上傳與下載是一個(gè)非常常見的網(wǎng)站功能,但是如果處理得不合理,可能會(huì)給服務(wù)器帶來(lái)很大的危險(xiǎn)。
首先說(shuō)說(shuō)文件上傳,如果不做任何限制,那么用戶可以上傳任意的文件到服務(wù)器。用戶可能上傳一些超大的文件到服務(wù)器,導(dǎo)致服務(wù)器磁盤被占滿;更危險(xiǎn)的是,用戶可能上傳一些病毒、木馬文件到服務(wù)器上,然后通過(guò)其他漏洞直接執(zhí)行這些上傳的文件。
文件下載則應(yīng)該控制好權(quán)限,使得用戶只能下載服務(wù)器允許他下載的文件。比如我們有一個(gè)文件下載的URL: “/download.jsp?path=/download/xxx”,開發(fā)者的本意是只允許用戶下載/download/目錄下的文件。但是如果用戶惡意構(gòu)造path參數(shù),比如path修改為/download/../../XXX那么用戶就可以下載到其他目錄的文件。
防范手段:
(1)文件上傳時(shí),開發(fā)者必須嚴(yán)格限制文件的后綴、大小等,并且把上傳的文件放到一個(gè)用戶無(wú)法直接訪問(wèn)到的目錄中。
(2)文件下載的問(wèn)題,首先應(yīng)該盡可能的避免通過(guò)參數(shù)傳入文件路徑的方式來(lái)下載,其次應(yīng)該對(duì)下載操作做嚴(yán)格的權(quán)限校驗(yàn)。
3 xssl擊
xss攻擊即跨站腳本攻擊,它是網(wǎng)站中經(jīng)常出現(xiàn)的一種攻擊方式。用戶通過(guò)輸入~些事先準(zhǔn)備好的JS代碼并保存到服務(wù)器上,如果服務(wù)器原樣的顯示用戶的輸入,那么用戶輸入的JS就會(huì)被執(zhí)行,從而實(shí)施攻擊。
以O(shè)J上的BBS為例,用戶在回復(fù)帖子時(shí),把“
客服熱線:400-656-5456??客服專線:010-56265043??電子郵箱:longyuankf@126.com
電信與信息服務(wù)業(yè)務(wù)經(jīng)營(yíng)許可證:京icp證060024號(hào)
Dragonsource.com Inc. All Rights Reserved