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