董齊芬 陶永紅
摘要:針對各類新型Web安全問題不斷出現(xiàn),而在傳統(tǒng)的“Web應(yīng)用程序設(shè)計”教學(xué)中往往不被重視的問題,文章以Cookie技術(shù)為例,探討著眼于培養(yǎng)學(xué)生網(wǎng)絡(luò)安全意識的Web應(yīng)用程序?qū)嶒灲虒W(xué)的具體設(shè)計與實現(xiàn)。運用生活化場景設(shè)計了利用Cookie記住用戶名和密碼、Cookie信息取證、Cookie欺騙和禁用Cookie等實驗任務(wù),以及關(guān)于“中國互聯(lián)網(wǎng)Cookie技術(shù)第一案”的拓展閱讀。通過這些簡單實驗,使學(xué)生能夠真正有效地明白Cookie及其“雙刃劍”效應(yīng),體會到網(wǎng)絡(luò)安全問題。
關(guān)鍵詞:Web應(yīng)用程序;網(wǎng)絡(luò)安全;Cookie;實驗教學(xué)設(shè)計
中圖分類號:TP309 文獻標(biāo)識碼:A 文章編號:1006-8228(2020)08-98-04
0 引言
我國高校的計算機類專業(yè)大多數(shù)開設(shè)了“Web應(yīng)用程序設(shè)計”課程[1-2]。傳統(tǒng)的教學(xué)主要側(cè)重于Web應(yīng)用系統(tǒng)在功能與美觀上的程序設(shè)計與實現(xiàn),其安全問題往往不被重視。然而,隨著網(wǎng)絡(luò)的普及,大量Web應(yīng)用功能及版本的快速更新,導(dǎo)致各類新型Web安全問題不斷出現(xiàn)[3-4]。因此,各高校逐步開設(shè)了專門的Web應(yīng)用安全類課程,在該課程教學(xué)過程中,通過一些簡單得實驗,讓學(xué)生體會網(wǎng)絡(luò)安全問題,這是非常有必要的,可為學(xué)生進一步學(xué)習(xí)Web應(yīng)用安全類課程提供扎實的鋪墊[5]。
本文以Cookie應(yīng)用為例,介紹Web應(yīng)用程序?qū)嶒灲虒W(xué)設(shè)計與實現(xiàn),以期達到培養(yǎng)學(xué)生網(wǎng)絡(luò)安全意識的目的。文中代碼是基于JSP程序設(shè)計實現(xiàn)的,但其原理與方法同樣適用于其他主流的動態(tài)網(wǎng)頁設(shè)計技術(shù)。
1 Cookie應(yīng)用的實驗教學(xué)總體設(shè)計
在關(guān)于Cookie概念、作用及基本用法的理論講解之后,學(xué)生可能對Cookie還是一知半解。為使學(xué)生真正有效地明白Cookie及其“雙刃劍”效應(yīng)[6],運用生活化場景設(shè)計實驗題目,并設(shè)置拓展閱讀環(huán)節(jié)。所設(shè)計的實驗內(nèi)容見表1。
2 Cookie應(yīng)用實驗設(shè)計與實現(xiàn)
2.1利用Cookie記住用戶名和密碼實驗
該實驗是典型的Cookie應(yīng)用例子。通過學(xué)生們熟悉的QQ郵箱登錄場景,引起學(xué)生對Cookie的興趣,然后布置實驗任務(wù)一:
設(shè)計如圖1(a)所示的登錄頁面,輸入用戶名和密碼,選擇是否“十天內(nèi)記住我的登錄狀態(tài)”,然后點擊“提交”按鈕,進入如圖1(b)所示的登錄處理頁面,顯示用戶名和密碼。當(dāng)如圖1(a)所示的登錄頁面上“十天內(nèi)記住我的登錄狀態(tài)”被選擇中,則在十天之內(nèi)登錄時就無需重新輸入用戶名和密碼了。由于已對Cookie概念、作用及基本用法作了理論講解,可先組織學(xué)生討論思路和嘗試編寫代碼。讓學(xué)生帶著問題進入下面的實驗設(shè)計與實現(xiàn)環(huán)節(jié)。
(1)設(shè)定保存用戶名和密碼的cookie名稱,這里分別為username和password。
(2)設(shè)計登錄頁面login.jsp。設(shè)計如圖l(a)所示的登錄表單,重點在于每次加載登錄頁面login.j sp時,首先需要讀取cookie文件,將讀取到的username和password的值作為登錄表單中用戶名框和密碼框的初始值。對應(yīng)的代碼為:
<% request.setCharacterEncoding(“utf-8”):
String uname="";
String pwd=…:
Cookie[] cookies=request.getCookies();
if (cookiesl=null)(
for(int i=0; i
Cookie c=cookies[i];
rf(c.getName().equals(”username")X//用戶名cookie
uname=URLDecoder.decode(c.getValue0,”utf-8”):
,
if(c.getNameO.equals(”password”)){//密碼cookie
pwd=c.getValue();
)
)
} %>
用戶名:
value=”<%=uname%>”>密???碼:
name=”password”value=”<%=pWd%>”>
十天內(nèi)記住我的登錄狀態(tài)
<,form> <,body>
(3)設(shè)計登錄處理頁面loginDeal.jsp。該頁面除了實現(xiàn)如圖l(b)所示的讀取并顯示用戶名和密碼功能外,還需要根據(jù)用戶是否選擇了記住登錄狀態(tài)分別作出處理:若用戶選擇了記住登錄狀態(tài),則新建兩個名稱分別為username和password的cookie(會覆蓋原有的同名cookie),設(shè)置它們的屬性,并添加到客戶端;若用戶不需要記住登錄狀態(tài),則讀取名稱分別為username和password的cookie,將它們的有效期為失效狀態(tài),并重新保存。對應(yīng)的代碼為:
<%
request.setCharacterEncoding("utf-8");
String username=request.getParameter("username");
String pwd=request.getParameter("password");
String[] cldlag=request.getParameteNaluesC'isCookie");
if(ckflagl=null&&ckflag.length>0) 11要求記住登錄狀態(tài)
{
Cookie usernameCookie=New Cookie("username",
URLEncoder.encode(username,"utf-8"》;
Cookie pwdCookie=new Cookie("password",pwd);
usernameCookie.setMaxAge(864000);
pwdCookie.setMaxAge(864000);//有效期為10天
response.addCookie(usemameCookie);//保存Cookie
response.addCookie(passwordCookie);
} else{,,不要求記住登錄狀態(tài)
Cookieo cookies=request.getCookies0;
for(int i=0; i
Cookie c=cookies[il;
if(c.getName().equals("username")
llc.getName().equals("password"》
(
c.setMaxAge(0); ,,設(shè)置Cookie失效
response.addCookie(c);,/重新保存。
}
)
}
%>
用戶名:<%=username%>
密?,??碼:<%=pwd%>
2.2 Cookie信息取證實驗
通過第一個實驗,學(xué)生可以較好地掌握新建Cookie、設(shè)置Cookie屬性、保存Cookie以及讀取Cookie等基本操作,但還是比較抽象。有不少同學(xué)會產(chǎn)生這樣的疑問,即Cookie像曲奇餅干那樣看得見摸得著嗎?故通過同學(xué)們感興趣的偵查破案場景,布置實驗任務(wù)二:
警方抓捕了一位涉網(wǎng)犯罪人員并現(xiàn)場收繳其電腦,但該嫌疑犯緘口不言。若你是警察,你會如何嘗試通過技術(shù)手段分析該嫌疑犯訪問了什么網(wǎng)站、使用了什么用戶登錄等內(nèi)容,從而掌握其涉案信息[7]?
在學(xué)生的好奇心下,以谷歌瀏覽器為例,介紹Cookie信息取證方法。
首先,依次進入谷歌瀏覽器的“設(shè)置”一“高級”一“隱私設(shè)置和安全性”一“內(nèi)容設(shè)置”一“Cookie”一“查看所有Cookie和網(wǎng)站數(shù)據(jù)”,即可列出通過谷歌瀏覽器瀏覽過的網(wǎng)站的所有Cookie,如圖2所示。
然后,選擇進入實驗任務(wù)一中我們自己所設(shè)計的網(wǎng)站即“l(fā)ocalhost”,可觀察到保存用戶名和密碼的兩個cookie,即username和password,如圖3所示。進一步分別進入這兩個cookie,就可觀察到該Cookie的內(nèi)容、所在域名、創(chuàng)建時間、到期時間等信息。
可見,Cookie是確確實實存儲在客戶端本地的數(shù)據(jù)。雖然不同的瀏覽器查看Cookie的方式各異,但是百度網(wǎng)上均能方便查閱到相關(guān)方法,故鼓勵學(xué)生課后自行研究其他瀏覽器的Cookie信息取證方法,從而可以較全面地對用戶何時通過何種瀏覽器登錄過什么網(wǎng)站、甚至登錄名和密碼等賬戶信息一目了然,那么當(dāng)警方掌握這些重要線索后,再審訊嫌疑人時,就可事半功倍。
2.3 Cookie欺騙實驗
實驗任務(wù)一和實驗任務(wù)二展示了Cookie的優(yōu)勢,但和大多數(shù)技術(shù)一樣,Cookie也是一把“雙刃劍”。比如,你或身邊的人是否經(jīng)歷過QQ郵箱在神不知鬼不覺時就被人盜走了,并冒充你的身份登錄你的QQ郵箱了呢?這正是同學(xué)們遇到過的煩惱與疑惑。為幫助學(xué)生解惑,布置實驗任務(wù)三:
借用Fiddler抓包工具[8],開展Cookie欺騙[9]實驗,演示Cookie信息被截獲與利用的過程。
通過實驗任務(wù)一中的登錄實例來展示Cookie欺騙實驗過程,具體實驗步驟如下。
(1)在計算機A上,啟動Fiddler,打開實驗任務(wù)一登錄頁面:htt衛(wèi)://1ocal host: 8080/chapter4—9/1ogin.jsp,輸入用戶名和密碼分別為“張三”和“123456”,進入到登錄處理頁面loginDeal.jsp。Fiddler抓到的包如圖4所示。
(2)在Fiddler中選擇登錄處理頁面的session,即http//localh_ost: 8080/chapter4—9/log in.jsp,然后點擊“Inspectors”選項卡,并在HTTP請求中選擇“Cookies”選項卡,看到關(guān)于用戶名和密碼的Cookie,如圖4所示。
(3)將圖4中關(guān)于用戶名和密碼的Cookie保存下來。然后,在一臺新的計算機B上,啟動Fiddler.在Fiddler Script中的OnB eforeRequest函數(shù)中添加如下語句: if(oSession.uriContains(”http://localhost:8080/chapter4-9”)) { oSession.oRequest.headers.Add(”Cookie”,
”username=%E5% BC %AO% E4% B8% 89;
password=123456”): }
(4)在計算機B上的任一瀏覽器中打開實驗任務(wù)一的登錄頁面,可以發(fā)現(xiàn)該頁面的用戶名和密碼自動填充為“張三”和“……”,如圖l(a)所示。這表明計算機A用戶的賬號信息被計算機B用戶利用了。
需要說明的是,上述實驗中,利用Fiddler實現(xiàn)了對計算機A的本地抓包。通過配置,還可以實現(xiàn)Fiddler遠程抓包,即計算機B遠程抓取計算機A上的網(wǎng)站操作行為。這部分內(nèi)容將在后續(xù)的“網(wǎng)絡(luò)攻防”、“信息安全技術(shù)”等課程中深入學(xué)習(xí),從而激發(fā)學(xué)生對后續(xù)網(wǎng)絡(luò)安全類課程的好奇心。
2.4 禁用Cookie實驗
從前述三個實驗可以體會到,Cookie在給我們帶來便利的同時,也會在不經(jīng)意間泄露我們的隱私,從而被不法分子利用,那么是否可以禁用這些Cookie信息呢?通過討論該問題,引出實驗任務(wù)四:
請利用瀏覽器設(shè)置、Cookie文件或目錄設(shè)置等兩種目前常用方式實現(xiàn)對Cookie禁用[10],并體會這兩種方法禁用Cookie的優(yōu)缺點。
在win7系統(tǒng)的谷歌瀏覽器下,通過實驗任務(wù)一中的登錄實例來開展禁用Cookie實驗。
(1)瀏覽器設(shè)置:依次進入谷歌瀏覽器的“設(shè)置”一“高級”一“隱私設(shè)置和安全性”一“內(nèi)容設(shè)置”一“Cookie”,將“允許網(wǎng)站保存和讀取Cookie數(shù)據(jù)”功能關(guān)閉。此時,實驗任務(wù)一的“十天內(nèi)記住我的登錄狀態(tài)”功能已無作用,在實驗任務(wù)二中圖2所示的Cookie列表中也無Cookie信息了。
(2) Cookie文件或目錄設(shè)置:進入保存谷歌瀏覽的Cookie文件的目錄C:\Users\當(dāng)前用戶名\AppData\LocaI\Google\Chrome\User Data\Default,找到Cookies文件,將其屬性設(shè)置為“只讀”。此時進入實驗任務(wù)一登錄頁面時,若Cookies文件屬性設(shè)置之前啟用過“十天內(nèi)記住我的登錄狀態(tài)”功能,那么仍會自動讀取之前保存的用戶名和密碼,但不會將重新輸入并提交的新用戶名和密碼保存到Cookie文件中。
最后,布置同學(xué)們課后在其他瀏覽器中進行嘗試,并查閱是否還有其他可行方法。
2.5 拓展閱讀
通過上述實驗操作,學(xué)生對Cookie會有較深體會,開始思考Cookie技術(shù)在實際生活中應(yīng)用的“雙刃劍”效應(yīng)。為拓展學(xué)生對Cookie的認識,引導(dǎo)其課后去關(guān)注中國互聯(lián)網(wǎng)Cookie技術(shù)第一案即“北京百度網(wǎng)訊科技公司與朱某隱私權(quán)糾紛案”,推薦學(xué)生在閱讀相關(guān)文獻[11]和文獻[12]的基礎(chǔ)上,給出自己的看法。
3 結(jié)束語
本文針對各類新型Web安全問題不斷出現(xiàn)的背景,以Cookie技術(shù)為例,提出了著眼于培養(yǎng)學(xué)生網(wǎng)絡(luò)安全意識的Web應(yīng)用程序?qū)嶒灲虒W(xué)的具體設(shè)計與實現(xiàn)。通過生活化場景設(shè)計實驗任務(wù),并設(shè)置拓展閱讀環(huán)節(jié),激發(fā)了學(xué)生的學(xué)習(xí)熱情,并調(diào)動了后續(xù)網(wǎng)絡(luò)安全類課程的興趣。但我們也意識到還有改進的空間,比如目前的教學(xué)設(shè)計還比較偏向于技術(shù)傳授,如何將思政元素融入課堂是我們在進一步的實驗教學(xué)設(shè)計中需要考慮的問題。
參考文獻(References):
[1]郎振紅.翻轉(zhuǎn)課堂在Web程序開發(fā)實驗教學(xué)中的應(yīng)用研究[J].實驗技術(shù)與管理,2016.33(2):151-154
[2]李嵐,曹宇佳,郭明娟等.基于“創(chuàng)新能力培養(yǎng)”的項目化教學(xué)法在動態(tài)Web技術(shù)課程中的應(yīng)用[J].蘭州文理學(xué)院學(xué)報(自然科學(xué)版),2018.32(6):114-117
[3]蔡晶晶,張兆心,林天翔.Web安全防護指南[M].機械工業(yè)出版社.2018.
[4]譚志超.Web應(yīng)用的安全形勢與防護策略研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2019.12:21-24
[5]李致遠,畢俊蕾,宋香梅.OBE教育理念下Web應(yīng)用安全課程教學(xué)模式探討[J].計算機教育,2019.9:103-107
[6]方霞.Cookie安全與用戶隱私研究[J].科技通報,2013.8:44-45,48
[7]吳春生,宋潤,賈永生.Cookie信息取證方法簡述[J].刑事技術(shù).2011.6:41-43
[8]肖佳.HTTP抓包實戰(zhàn)[M].人民郵電出版社,2018.
[9]王永樂,葛洪央.淺析Cookies欺騙攻擊與防御策略[J].信息技術(shù).2014.8:176-179
[10]三種方法禁用Cookie讓上網(wǎng)更安全[J].網(wǎng)絡(luò)與信息,2009.10:51
[11]李謙.人梧、隱私與數(shù)據(jù):商業(yè)實踐及其限度——兼評中國cookie隱私權(quán)糾紛第一案[J1.中國法律評論2017.2:122-138
[12]朱蕓陽.定向廣告中個人信息的法律保護研究——兼評“Cookie隱私第一案”兩審判決[J].社會科學(xué),2016.1:103-110
作者簡介:董齊芬(1985-),女,浙江富陽人,博士,副教授,主要研究方向:機器學(xué)習(xí)、犯罪預(yù)測、Web應(yīng)用程序設(shè)計。