- 等级
- 社长
- 等级进度
- 积分
- 35065
- 阅读权限
- 255
- 主题
- 精华
- 社区币
- 星梦
- 注册时间
- 2003-8-25
- 最后登录
- 1970-1-1
|
<BR>[Point=80]function checkForm() {<BR>document.forms[0].userName.value = _<BR>RemoveBad(document.forms[0].userName.value);<BR>return true;<BR>}<BR>// MICROSOFT'S CODE<BR>function RemoveBad(strTemp) {<BR>strTemp = strTemp.replace(/\</\>/\"/\'/\%/\;/\(/\)/\&/\+/\-/g,"");<BR>return strTemp;<BR>}<BR>用這個辦法,可以過濾在輸入中含有的這些字元:<BR>% < > [ ] { } ; & + - " '( )<BR>3.使用HTML和URL編碼<BR> 儘管使用上面所說的過濾和限制輸入的辦法是一種非常重要用防禦手段,但它對我的這種採用郵件方式的攻擊還是無能為力。因為我把URL的參數直接放在郵件中。針<BR>對這種情況我們不得不採取一種更有力的安全措施。如果我們用的ASP,解決起來相對說來要容易得多。只要對動態生成的網頁總進行HTML和URL編碼就行了。針對我們例子<BR>中的情況,在第一輸入頁中我們對redirect URL作了如下改動:<BR>strRedirectUrl = strRedirectUrl & _<BR>server.URLEncode(Response.Cookies("userName"))<BR>在執行頁中我們加入:<BR>strUserName =server.HTMLEncode(Request.QueryString("userName"))<BR>和<BR>strUserName =server.HTMLEncode(Request.Form("userName"))<BR> 微軟推薦對所有動態頁面的輸入和輸出都應進行編碼。甚至在對資料庫資料的存入和取出也應如此。這樣你就能在很大程度上避免跨站script的攻擊。<BR>要做到這些還要在Page1.asp中加入:<BR><%@ Language=VBScript %><BR><% If Request.Cookies("userName") <> "" Then<BR>'redirect if detect the cookie<BR>Dim strRedirectUrl<BR>strRedirectUrl = "page2.asp?userName="<BR>strRedirectUrl = strRedirectUrl & _<BR>server.URLEncode(Request.Cookies("userName"))<BR>Response.Redirect(strRedirectUrl)<BR>Else %><BR><HTML><BR><HEAD><BR><META http-equiv="Content-Type"content="text/html; charset=ISO-8859-1"><BR><TITLE>MyNiceSite.com Home Page</TITLE><BR></HEAD><BR><SCRIPT LANGUAGE="javascript"><BR><!--<BR>function checkForm() {<BR>document.forms[0].userName.value =<BR>RemoveBad(document.forms[0].userName.value);<BR>return true;<BR>}<BR>//******************************************************<BR>//Programmer: NOT ORIGINAL CODE - COMES FROM MICROSOFT<BR>//Code Source: Microsoft Knowledge Base Article Q25z985<BR>//Description: Removes bad characters.<BR>//******************************************************<BR>function RemoveBad(strTemp) {<BR>strTemp =strTemp.replace(/\</\>/\"/\'/\%/\;/\(/\)/\&/\+/\-/g, "");<BR>return strTemp;<BR>}<BR>//--><BR></SCRIPT><BR><BODY><BR><BR><BR><H2>MyNiceSite.com</H2><BR><BR><BR><FORM method="post"action="page2.asp" onsubmit="return checkForm();"><BR>Enter your MyNiceSite.com username:<BR><INPUT type="text"name="userName" width="10" maxwidth="10"><BR><INPUT type="submit"name="submit" value="submit"><BR></FORM><BR></BODY><BR></HTML><BR><% end if %><BR>Page2.asp中加如:<BR><%@ Language=VBScript %><BR><% Dim strUserName<BR>If Request.QueryString("userName")<>"" Then<BR>strUserName =server.HTMLEncode(Request.QueryString("userName"))<BR>Else<BR>Response.Cookies("userName") =Request.Form("userName")<BR>strUserName = server.HTMLEncode(Request.Form("userName"))<BR>End If %><BR><HTML><BR><HEAD><BR><META http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"><BR></HEAD><BR><BODY><BR><H3 align="center">Hello: <%= strUserName %></H3><BR></BODY><BR></HTML><BR> 現在由於這種攻擊遭到有效的防制。那於那些惡意的標籤和Script被編碼,他們就被以文字的形式顯現了出來,如下圖:<BR> 我們也可增加一個IIS元件用於過濾所有從動態輸入中的特殊字元。對於那些已經做好的網站,採用這種辦法來防止跨站script的攻擊來得非常容易。我們的這個控制項<BR>能攔截來自ASP頁面的REQUEST目標,可對表格,cookie,請求字串和程式的內容進行檢測:<BR> 我們也可以通過編寫log檔的方法把統計資料加入這個元件中。每當一個客戶輸入一個非法字元時,這個元件會記下它的IP位址和時間。詳情請見Doug Dean的<BR><<Roll your Own IIS Application on ASPToday>>一文。<BR> 我們只需採取一些簡單的步聚就能有效地阻止跨站script的攻擊。除了以上所說的三種方法外,微軟和CERT還強烈推薦使用一種他們稱之為“sanity check”的方法<BR>。例如,假設有個輸入視窗只允許輸入數位,我們就給它做個限定,只允許\0-9數位的輸入。微軟和CERT所採用的這種對輸入的字元進行限定的辦法要比單獨的採用過濾特<BR>殊字元要好得多。採用了這些措施後你就能讓那些參觀你網站的客戶在訪問你網站時受到保護。<BR>二、免受黑客攻擊我們流覽器方法:<BR> 當你在網上漫遊的時侯,怎樣來避免受到攻擊呢?微軟和CERT建議不要在網上胡碰亂撞。針對這種情況,PC雜誌一個欄目的名叫John Dvorack作者作了一個饒有興趣<BR>的回答。他認為這是微軟公司一起有預謀的行為:就是用來恐嚇網上衝浪的人到那些安全的站點去流覽,如美國線上和MSN.com網站。<BR> 在我們所舉的例子中,即使你不在網上胡亂遊蕩,也不能避免在網上遭到黑客的襲擊。具有諷刺意義的是,大多數的危險都來自于我們最信任的網站。如果要讓網站一<BR>定不出問題,你只好不下載任何動態內容或者任何cookie。預知詳情請參閱流覽器的相關資料。<BR> 微軟也警告你們應把流覽器的Active Script設置成嚴格限制的狀態並把Email也設成嚴格限制的接收模式。在點擊郵件中的鏈結時,一定要小心。如需進一步瞭解情<BR>況請參閱一本名叫<<Microsoft's Knowledge Base Article Q253117>>的書。為了以防萬一,你最好是多一點上網經驗,並且時刻要小心謹慎。<BR>結論<BR> 如果你是以前的UNIX程式開發人員,你也許不會知道跨站script意謂著什麼。你知道許多站點的管理人員登錄的用戶名和密碼分別為root,root.同樣許多資料庫管理<BR>員的名稱和密碼分別為sa,password。你也知道Webzine(如Phrack 和 Alt2600),依據他們所提供的方法能讓你一步步地知道某台伺服器的弱點。在這種硬體上,你也知<BR>道許多網站的資料庫伺服器和web伺服器都沒有進行自我保護。一但遭遇黑客,機器就得癱瘓。<BR> 儘管我們很容易採取防止系統受到黑客的攻擊的措施,但我們的系統是一直暴露在黑客面前的。我們完全有理由相信下一年還會出現一些新的安全漏洞。在CERT公司<BR>John Howard先生指導下完成的一篇論文中曾提到:“跟據目前的研究顯示,每個在英特網上具有功能變數名稱的網站平均一年被黑客至少攻擊一次。”<BR> 對伺服器來說那怕只是一次這種攻擊也是不能承受的。跨站Script攻擊是黑客可採用的另一種方法。但我們只要進行以上所說的一些簡單的處理就能防止這種形式攻擊<BR>的發生。<BR>[/Point] |
|