設定你的根目錄
作者: Kyle 2/16/03
內容:
設定你的根目錄
網站開發人員向來都一直必須在相對路徑 vs. 絕對路徑這項議題上面打轉。在 ColdFusion 環境里面,你可以在多個不同頁面使用 CFINCLUDE 卷標,不過既然我們對于在哪個目錄里面將會用到 CFINCLUDE 語法,因此在 CFINCLUDE 卷標里面使用相對路徑經常會造成很多麻煩。
舉例來說,某個被包含的選單里面可能有一個指向網站首頁的連結,像下面這樣:
<A HREF="index.cfm">Home Page</A>
在網站根目錄下面的任何檔案引入這個包含檔都不會有問題。但是如果你在某個次目錄下的一個檔案里面引入這個選單檔案,那么上面這個超鏈接便會失效,或者至少會連結到錯誤的頁面去。這時候你實際上會希望這個超鏈接是寫成這樣:
<A HREF="../index.cfm">Home Page</A>
有兩種方式可以克服這個問題。一個是在超鏈接里面直接使用絕對路徑。要使用這個作法,你必須在 ColdFusion 里面預先設定好一個路徑對應關系(mapping)。你可以在 ColdFusion 管理員(ColdFusion Administrator)的「路徑對應(Mappings)」區塊里面建立這些對應關系。一旦你建立好了路徑對應關系,你便可以把指向網站首頁的超鏈接寫成下面這個樣子:
<A HREF="/mymapping/index.cfm>Home Page</A>
如果你使用了絕對路徑,那么不論你在那個位置引入這個檔案,該檔案里面的超鏈接永遠都會保持有效。我通常使用一個叫做 APPLICATION.RootDir 的應用程序變量來儲存這項路徑對應設定,并且在超鏈接里面直接套用這個變量。使用這個作法,如果我真有必要修改目錄結構或者路徑對應的名稱,那么我只需要修改這么一個變量的值就可以了。
<CFSET APPLICATION.RootDir = "/MyMapping">
如果你套用這個變量,你的超鏈接看起來會像下面這樣:
<A HREF="#APPLICATION.RootDir#/index.cfm">
在每個頁面的開端建立這樣的變量,那么你就可以在該頁面的其它部分套用這個變量的值。包含檔案運作起來就像該檔案的內容實際上真的被寫入原有頁面一樣,因此如果檔案 A 引入了檔案 B,那么在檔案 B 里面我們便可以直接參照到檔案 A 里面的變量值:
<!--- 在每個頁面設定 RootDir 變量值 --->
<CFSET RootDir ="../">
<!--- 在被引入的頁面中參照 RootDir 變量的值(只要確定這個變量確實有被定義即可,否則在引入檔案的時候會出現錯誤訊息) --->
<A HREF="#RootDir#news/newspage.cfm"></code>
使用自訂卷標來設定版面配置
ColdFusion 的自訂卷標功能讓你能夠將任何你想象得到的功能封裝成一個簡單易用的包裝。雖然這項功能早在幾年前便是 ColdFusion 服務器的功能之一,但是從 4.0 版本開始,你可以在自訂卷標里面使用啟始與結尾卷標。為了說明如何使用自訂啟始與結尾卷標,在下面這個范例里面我們將網頁內容包裝在一個自訂卷標里面,并且提供版面配置與格式化的相關功能。
想想看,如果在某個普通頁面里頭可以使用下面這樣的寫法,那不是很棒嗎!
<CF_FormatPage Title="My Page Title">
這里是你的頁面主要區域的內容。請注意我們在這里并沒有加入表格或者 <BODY> 卷標之類的東西。
</CF_FormatPage>
整個頁面原始碼就是這樣了。其它所有版面配置與格式化信息都被隱藏在主要內容外面的自訂卷標里面。為了能夠在你的自訂卷標里面使用啟始與結尾卷標,你必須先了解自訂卷標的兩種使用狀態。你可以透過 #ThisTag.ExecutionMode# 這個變量的值來判斷目前被使用的是啟始或者是結尾卷標。基本上你的自訂卷標內容會被執行兩次:一次是遇到啟始卷標的時候,另一次便是遇到結尾卷標的時候。為了不讓這篇文章顯得過于冗長,在這里我們并不加入太多格式化的相關程序代碼,但是下面這個基本的 CF_FormatPage 自訂卷標應該足夠讓你了解我們剛才提到的觀念:
<!--- 以下是 CF_FormatPage 自訂卷標檔案內容 --->
<!--- 如果執行模式是「Start」,表示我們遇到的是啟始卷標,因此我們顯示頁面格式的前半段 --->
<CFIF ThisTag.ExecutionMode IS "Start">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE><CFOUTPUT>#ATTRIBUTES.Title#</CFOUTPUT></TITLE>
</HEAD>
<BODY>
上面這段內容可以包含頁面標題圖片,選單或者其它內容。
<!--- 被包含在這個卷標里面的其它內容則會接著在這里顯示 --->
<!--- 如果執行模式是「End」,表示我們遇到了結尾卷標,因此我們顯示頁面格式的后半段 --->
<CFELSEIF ThisTag.ExecutionMode IS "End">
<BR><BR>這里是頁面的頁尾區域,在這里你可能會放入內容連結或者版權宣告文字。
</BODY>
</HTML>
</CFIF>
你能做的東西當然比這個簡單例子多得更多,例如加入動態選單,針對每個頁面加入不同的標題圖片等等。或者換一種作法,你可以針對不同狀況建立不同的自訂卷標來把版面配置封裝起來,只要能夠符合你自己的特定需求就行了。
保護頁面不受跨網站(cross-site)程序攻擊
跨網站程序攻擊是網站管理人員經常必須面對的安全性問題之一。像是 ASP,CFML 或者 PHP 這類的應用程序服務器,由于它們與生俱來的動態功能特性,使得它們特別容易受到這一類的攻擊。很多時候你的程序都會把某些信息從某個頁面傳送到另一個頁面,將資料儲存到數據庫中,或者將窗體或 URL 參數接收到的變量值顯示在頁面上。雖然能夠在不同頁面之間傳遞資料看起來是一個優點,但是如果你不夠小心的話,這項特性也會同時帶來嚴重的安全性問題。舉例來說,請看看下面這個超鏈接以及相對應的目標頁面顯示的結果:
<!--- 下面是你某個頁面中的超鏈接 --->
<A HREF="nextpage.cfm?username=Brian">請按這里</A>
<!--- 下面是 nextpage.cfm 所顯示的內容 --->
<CFOUTPUT>
歡迎來到下一頁,#URL.UserName#。
</CFOUTPUT>
看起來夠簡單了吧?上面這個超級鏈接純粹把使用者名稱從一個頁面傳遞到另一個頁面去(nextpage.cfm),如果你不夠小心的話,這正是問題可能發生的地方。跨網站程序(cross-site scripting)基本上便是欺騙你的 Web 服務器,讓它在未預期的的情況下執行其它網站上面的程序,JavaScript,Java applet 或者 ActiveX 控件。
如果你觀察上面這個例子的目標頁面的 URL,它看起來會是下面這樣:
http://www.mysite.com/nextpage.cfm?username=Brian
某位不懷好意的使用者可以自己輸入一個 URL,里面包含一個連向另一部服務器上面的程序的連結,就像下面這樣:
http://www.mysite.com/nextpage.cfm?username=<script src="http://www.hackersite.com/nastyscript.js">
當 ColdFusion 在下一個頁面輸出上面的 URL 所傳過來的變量的時候,輸出結果看起來變成下面這樣:
歡迎來到下一頁,<script src="http://www.hackersite.com/nastyscript.js">。
這個變量會讓你那無辜的頁面在你未預期的狀況下執行對方指定的 JavaScript 程序代碼。利用類似的方式,對方也可以在 URL 里面指定惡意的 ActiveX 控件或者 JavaApplet。當然,在這個例子里面,使用者僅是在瀏覽器上面執行他們自己指定的程序而已,但如果這些惡意程序代碼被你自己的程序不小心儲存起來并且之后又輸出到其它使用者的畫面上(例如搗亂者將某些 JavaScript 程序代碼輸入在你的討論區發表文章窗體里面,然后你的程序在不知情的狀況下把這些程序代碼當成發言內容的一部份存入數據庫中,那么其它使用者觀看到這篇文章的時候,那些被刻意放入的 JavaScript,Java Applet 或者 ActiveX 控件便會在其它使用者的瀏覽器上面執行了),這時候那些程序就可能足以將其它使用者的帳號,密碼或者其它敏感資料暗中傳送到某個地方去。這項安全性問題并非 ColdFusion 才會發生的狀況,任何應用程序服務器,只要它能夠接收從 URL 或者窗體傳送過來的資料并且顯示在使用者畫面上,都有可能受到這類攻擊。
幸運的是,要避免這種狀況發生并不困難。你要做的工作是過濾來自 URL 或者窗體傳送過來的資料,并且將一些特殊的危險字符,例如 < 或者 >(大于和小于符號),把他們替換成相對應的 ASCII 字符碼形式(例如將 < 替換成 <)就可以了。事實上 Allaire 公司提供了一個 CF_InputFilter 自訂卷標,你可以將它用在你的 application.cfm 檔案里面,它可以替你處理相關的特殊字符過濾工作。如果你需要更完整的關于這項議題的資料,請參考「Allaire 安全問題布告欄」網站上面的這篇文章(ASB00-05)。
使用 Fusebox
一旦你已經了解 ColdFusion 服務器的運作方式,并且覺得和 CFML 語言相處愉快,那么建議你試試 Fusebox,它是在 ColdFusion 平臺上面最受歡迎的標準化開發技術。
Fusebox 將一個應用程序分解成最基本的幾個組件,每個組件都被封裝成為一個獨立的「保險絲(fuse)」。你可以在應用程序里面視需要插入不同的保險絲組件,并且延伸擴充應用程序的功能。這種對象導向的開發方法充分利用了 ColdFusion 自訂卷標的模塊化天性,并且將這項觀念應用到整個應用程序上。
Fusebox 充分利用程序代碼的可重用性以及模塊性,這兩項都是任何應用程序開發工具所奉承的圭臬。Fusebox 的運作模式不但讓你能夠將同一個保險絲(亦即程序模塊)插入到不同的應用程序,它還可以讓你將其它人開發的模塊輕易地套用在你自己的應用程序上面。
Fusebox 的運作模式是以一個「主應用程序(Home application)」作為中心,它代表了你的整個應用程序。這項主應用程序則是由許多不同的「周邊回路應用程序(Circuit applications)」所共同組成的,每一個周邊回路應用程序都可以從主應用程序這邊呼叫。你可以透過 URL 或者窗體來在主應用程序與周邊回路應用程序之間傳遞一個稱為 FuseAction 的變量,這個變量可用來決定你要執行的動作。各種需要用到的檔案則都以不同的類型來加以區分,因此應用程序中的各個數據庫查詢語句,動作指令以及顯示畫面等等都是彼此相互獨立的。這項獨立性讓你能夠掌握最高的可重用性以及易用性。
使用 Fusebox 不僅對于 ColdFusion 應用程序開發過程有所幫助,它還可以幫助你容易跨入 Allaire 公司 ColdFusion 產品線的下一個產品:Allaire Spectra。Spectra 使用的對象導向架構在許多方面都和 Fusebox 所使用的架構非常類似。這兩項產品之間的主要差異在于 Spectra 內建了許多預先設計好的自訂卷標與函數,可以直接用來處理各式各樣開發工作,例如內容管理,個人化以及電子商務相關功能等等。
IIS安裝路徑 : 默認值得c:/inetput/wwwroot
ColdFusion mx : 也是預設路徑
我安裝iis跟coldfusion的路徑都是預設的情況下,
據我所了解,如果安裝完成后,coldfusion會在c:/inetput/wwwroot底下產生一些目錄夾,當一切就緒后,就可以開始撰寫FLASH MX 與 COLDFUSION MX 的REMOTING程序了.并且一切都很OK.但是有些情況下,可能我們會在IIS新增一個 WEB Site(路徑當然也改變),
更有可能為了安全問題把預設的站臺關閉(路徑就是c:/inetput/wwwroot).在這樣的情況
下,我將原來可以執行的程序移到新的web site (新的路徑),并且也更改了as中的setDefaultGatewayUrl()與 相關路徑,不過仍不能運作,請問要如何解決這個問題呢?
又setDefaultGatewayUrl()的真正涵義是什么呢?有什么要注意的嗎?
可否解釋setDefaultGatewayUrl()的底層真正涵義?
是否您己經停止原有的預設網站 ?
若是, 您需要重新建立一個與 cfmx 連結的 connectors ,或
將 IIS 中的 ISAPI 的設定到您新增的站臺及 JRUNSCRIPT 的虛擬目錄
應該就可以解決這個問題
setDefaultGatewayUrl 是指定 flash remoting 服務器的接口地址,
就如同一般的網址,但是它所連結的是一個服務而不是網頁內容.
1.建立截然不同的應用程序
透過Macromedia Flash Communication Server ,您可以在網站內容中建立和整合出全新型態的互動功能和用戶體驗。您可以輕易地在網站和應用程序中,增加像聊天室、串流視訊、多樣化的媒體訊息交流和實時協同作業等等的功能。
2.接觸到最廣泛的網際網絡通訊用戶
Macromedia Flash Player是網站上最被廣泛采用的軟件,因此無論網際網絡上的用戶使用哪種瀏覽器、平臺或者裝置,絕大多數的使用者將能體驗您的通訊應用程序。
3.自訂品牌的視訊和通訊體驗
建立能符合您的品牌外觀與形象的視訊媒體演示文稿,乃至于其中的按鈕和導覽接口。如同所有的Macromedia Flash 影片內容,采用Macromedia Flash Communication Server MX建立的通訊應用程序將能被立即加載,并能在現存的HTML網頁中執行,和在一個沒有品牌標示、與網頁內容緊密結合的播放器中呈現,讓您的內容燦爛奪目。
4.多向通訊能力
建立自發性的、實時、單向、雙向或者n向的通訊應用程序。透過廣播給多人、或者建立私人或群組會談等功能,把人性互動加入您的網站內容。
5.與既有的應用程序緊密地結合
透過Flash Remoting(內建于Macromedia ColdFusion MX和JRun 4),您即可輕易地在既有的應用程序和企業資料中注入通訊功能。
6.企業級的服務器解決方案
Flash Communication Server達到在企業內部網絡、外部網絡或者公眾網站部署通訊功能所需的安全性、擴充性和可靠度的要求。
7.充分發揮Macromedia Flash MX 開發環境的威力
透過熟悉的script語言,清晰的說明和教學文件、事先做好的范例文件以及廣大的協力網站社群、書籍和其它致力推廣Macromedia Flash平臺的資源,已經了解Macromedia Flash 的研發人員將對感到駕輕就熟。
8.可擴充的預制通訊對象鏈接庫
經由拖放組件的方式,便能迅速和輕易地建立標準的通訊應用程序。您可以透過容易使用的Macromedia Flash MX可視化設計工具,修改組件讓它符合您的網站設計,并加入自訂的企業標識、背景和其它設計元素。您甚至可以自行修改組件的原始碼,來制作出各種類型的應用程序。
9.具備同步功能的Shared Object(共享對象)
這項最新科技使得制作讓所有參與者都能分享共同體驗的應用程序變成可能,如此,每一位通訊用戶都能收到相同和持續的聲音、視訊和數據資料。
10.離線資料同步
建立能在離線狀態下體驗并且更新的應用程序。Macromedia Flash 客戶端能在用戶稍后重新聯機的時候,同步應用程序和所有需要更新的資料。
正確設置Flash Communication Server
作者: Jolin 12/29/02
內容:
正確設置Flash Communication Server,防止有未授權用戶登入,盜用服務器,游戲作弊,甚至關閉服務器等的風險發生
關于管理設置:
1、使用安全的用戶名于密碼,不要使用如"admin", "administrator"之類用戶名。密碼不少于8個字母,當中使用數字與標點符號
2、編輯Server.xml(我的機器中路徑為C:/Program Files/Macromedia/Flash Communication Server MX/conf/Server.xml)中的<User>標記下的<Allow>與<Deny>兩個標記可以控制該用戶從哪臺計算機登陸管理。
3、同上,在里面修改管理用的埠。如果僅用于intranet使用,或僅在本地網絡登陸管理,在防火墻中關閉此埠,防止外部訪問。
Vhost.xml設置:
我的機器路徑為E:/Program Files/Macromedia/Flash Communication Server MX/conf/_defaultRoot_/_defaultVHost_/Vhost.xml
1、編輯其中<Allow>與<Deny>標記,不過這次控制的使用你服務的人。
2、如果你的程序中不會使用stream,將<MaxStreams>設為0
3、可以視需要設置<RecordAccessLog>為on或off開關訪問日志(例如你覺得有異常需要查看日志的時候)
關于服務的設置:
在Server.xml中
1、修改<ResourceLimits>可以控制服務器使用的資源,具體可見xml里的注釋
2、當需要運行使用多臺服務器的程序時,請設置<ServerDomain>標記
Adaptor.xml(我的機器路徑為E:/Program Files/Macromedia/Flash Communication Server MX/conf/_defaultRoot/Adaptor.xml)中
3、檢查<HostPortList>標記,如果服務僅在intranet使用,請在防火墻中關閉此埠。
4、編輯<Allow>與<Deny>可以控制用戶使用程序的域名與ip地址
寫程序時的注意事項:
1、程序的最后成品,不應由用戶輸入程序的名稱或服務器的ip又或其它關鍵信息,雖然我們寫程序的調試的時候通常都這樣做,但成品中這些都應該屏蔽到用戶找不到的代碼中去。
2、當用戶登陸時,用server-side scripts(例如cfm),檢查客戶的referrer屬性,以確定它來自你希望來的地方,通常應該是訪問應該來自你的web服務器上放的swf,而不應該是黑客自己寫的swf
3、除了上面的措施外,你的swf與服務器之間最好還有其它一些握手的方法(就是確定是你自己的swf,而不是黑客的swf的方法,例如領牌,又或其它算法),雖然swf不很牢固,但這起碼會費調黑客一些時間,不至于用些淺陋的方法就危害到你的服務器
4、檢查你服務器端的腳本(.asc),清除其中所有開發期間遺留下的調試用的,無用的,trace用的代碼
5、清除所有無用或舊版本的腳本
關于程序的設置
1、設置Vhost.xml中<AppsDir>標記,這就是你程序所在的目錄,請確定它不能被外部瀏覽甚至下載
2、整理你程序所在目錄,只留下你需要提供給用戶的程序。
3、移走所有Macromedia Flash Communication Server MX安裝時自帶的例子
4、在Vhost.xml與Application.xml中設置<Streams>與<StorageDir>標記,指定視頻文件存放目錄,請確定它不能被外部瀏覽甚至下載,具體可見xml里的注釋
5、設置Vhost.xml<ResourceLimits>標記中shared objects到適當數值
6、設置Vhost.xml<Allow>標記限制訪問者來自的域名
7、設置Application.xml中<JSEngine>中的<MaxTimeOut>以防程序進入死循環浪費服務器資源
關于web文件
1、web文件,如html、swf等可公開訪問的文件要與Flash Communication程序文件分開目即娣?
2、除了web文件,web目錄下不應有其它文件,特別是你的fla!!
Server.xml、Vhost.xml、Application.xml的關系就是一級級的關系,用過IIS的都應該能了解了,正確設置它們不但使你的服務器更安全,也會更高效。
清除Flash com電子白板的方法...
作者: Kyle([email protected]) 2/11/03
內容:
//put this in your whiteboard main client side
//if it is already not there
//delete all SOs prototype
FCWhiteBoardClass.prototype.eraseBoard = function() {
for (var i in this.so.data) {
delete (this.so.data[ I ]);
}
this.so.flush();
};//end function
//now for the delete button
myButton.onRelease = function() {
theWhiteBoardInstance.eraseBoard();
};
作者: Jolin([email protected]) 2/13/03
內容:
網址如下...
雖然是英文的...
但是看程序代碼就夠了..^_^
http://www.macromedia.com/devnet/mx/flashcom/articles/broadcast/video_tutorial.swf
http://www.macromedia.com/desdev/mx/flashcom/articles/broadcast.html
這是國外的一個網站...他會記錄下我每次的會議影音...可看看
會議室
http://mxbook.theMakers.com/v1/ch13/confRecord.html
會議記錄
http://mxbook.theMakers.com/v1/ch13/confRetrieve.html
Flash讀取非unicode的中文網頁解決法..
內容:
當利用FLASH連結不是使用unicode的中文網頁,在顯示時會產生亂碼的問題,可以利用下面的指令解決...
System.useCodepage=true;
Flash UI 組件的外觀加強版!!
作者: Kyle 2/15/03
內容:
大家覺得UI 組件很好用吧...可是就是有個缺點..
不好看....
現在有人做了個加強版....讓UI不再那么難看了喔..^_^
想要了解的人可到下面網站下載
http://www.octaneinteractive.com/
范例可以看這里...
http://www.octaneinteractive.com/beta/ScrollBar/