2009-05-22 19 views
6

CFC的一項重要功能是可以爲直接.cfm頁面和Flex應用程序重複使用代碼。如何保護來自窺探者的CFC中的access =「remote」功能?

我開發的一個這樣的應用程序使用Flex的圖表功能,並需要訪問cfc中的「getResults()」功能。

所有這些內容的背後是一種身份驗證機制,但由於CFC將打開自己高達WSDL請求:

https://myserver.com/c/functions.cfc?wsdl

,並實際上將結果返回給瀏覽器,如果網址查詢是否已正確製作:

https://myserver.com/c/functions.cfc?method=getResults&Term=2009&Course=Anatomy

有什麼技術讓人們用來保護cfc免受直接訪問,除非請求是直接來自CFML處理器還是來自Flex Remoting?

回答

4

您可以利用一些CGI範圍變量來檢查請求來自哪裏。

即:CGI.REMOTE_HOST,CGI.REMOTE_ADDR

所以,你可能會建立一個新的功能與接入=「公共」,檢查這些變量的值對有效值的列表,你的財產服務器。如果它返回true,你會執行請求,如果它返回false,你會拋出/返回某種錯誤。

+0

你也可以通過某種憑據來保護請求,從而增加另一個煩人的薄牆。 – 2009-05-22 23:47:37

+0

我認爲這是要走的路。我使用CGI.SCRIPT_NAME來測試瀏覽器是否直接訪問CFC。如果是的話,他們會得到靴子。 – 2009-05-26 19:52:39

3

我建議增加一個OnRequestStart處理您的Application.cfc文件,並進行檢查那裏...那是什麼檢查是取決於你目前的模式,但一些很好的建議是檢查CGI .remote_user(如果通過身份驗證)或者可能在會話範圍中存儲某些內容?

<cfif structKeyExists(session,"empID") and len(session.empid)> 
    <!--- user is authenticated, process normally ---> 
<cfelse> 
    <!--- abort request or sending meaningful error message ---> 
</cfif> 
1

一件事我更願意做的是僅具有一個爲每個方法的參數 - XML或STRUCT - 和需要一定的節點/對象名存在於該XML或結構。

<cfif NOT StructKeyExists(arguments.myArgs, "requiredParam")> 
    <cfxml name="myXML"> 
     <error> 
      <message>Required parameter not found.</message> 
     </error> 
    </cfxml> 

    <cfreturn myXML /> 
</cfif> 

2

如何使用新的角色屬性是什麼? 訪問您的網站的每個人都會自動獲取cflogin roles =「public」。

0

過這個問題,剛來到同時尋找別的東西,以爲我想補充我的2P:

我有使用遠程CFC,我只想提供給記錄在「管理」用戶的應用程序。 在這種情況下,CGI變量檢查仍然會傳遞給應用程序的訪客用戶。

當管理員用戶登錄時,我會對他們的會話ID和登錄時間進行散列並將其存儲在數據庫和會話範圍中。當我點擊遠程CFC時,我將散列作爲變量傳遞給管理員用戶數據庫。

如果記錄回來了,我知道當前用戶是admin,我繼續請求。