簡體   English   中英

CF包括最佳實踐和潛在的安全隱患

[英]CFIncludes best-practice and potential security concerns

我正在編寫一個包含許多對話框/模式div的應用程序,允許用戶執行各種任務,例如上載圖像,發送電子郵件等。

我的應用程序具有基於角色的安全性,因此在您登錄時,它會檢查您的會話變量以了解您的身份,然后提供適當的功能。

目前,我的所有對話框/模式都在需要它們的頁面中。 這意味着,如果要在網站的其他位置使用相同的對話框,則必須復制代碼並將其放在該頁面上。 這立即使我認為我應該:

  1. 為每個對話框如.CFM文件imageupload.cfmemailsend.cfm
  2. 使用<cfinclude>包含這些.cfm文件,任何頁面上都希望使用它們

這個潛在的解決方案給我帶來了挑戰,因為將包含對話框的頁面上有許多if / else語句,這些語句根據用戶的角色(存儲在會話變量中)確定要呈現給哪個用戶的內容。

所以我必須:

  1. 也將if / else邏輯語句復制到對話框頁面,因為例如imageupload.cfm提供的內容將根據您的角色而有所不同
  2. 該站點中的每個頁面都受到調用user-security.cfc文件的保護,該文件檢查用戶是否已登錄。我還必須在每個對話框.cfm頁面中進行此調用嗎? 如果執行此操作,則同一頁面內將有兩個對同一user-security.cfc文件的調用,因為該對話框頁面已包含在主頁中。 但是,如果我也不從.cfm對話框中調用user-security.cfc ,那么有人可以直接進入這些頁面並開始引起混亂嗎?

抱歉,這不是一個純粹的編程問題,更不是理論上的最佳實踐,但是我不確定如何在保持可擴展性的同時解決它。 我在IIS 7.5上使用ColdFusion 10

您可以按如下方式提高代碼的可重用性。

使用user-security.cfc文件的實例創建應用程序范圍變量。 在Application.cfc文件的onApplicationStart()方法中執行此操作。 像這樣:

application.SecurityChecker = CreateObject("component", "user-security");

同樣,在onApplicationStart()方法中,創建不需要安全檢查的頁面列表。

application.SecurityNotNeededPages="page1.cfm,page2.cfm,etc";

在onRequestStart()方法中使用這些變量。

var ThisPage = listlast(cgi.PATH_INFO, "/");
if (ListFindNoCase(application.SecurityNotNeededPages, ThisPage) is false) {
application.SecurityChecker.CheckSecurityMethod(argumentcollection = session);
etc

如果用戶未登錄,這將解決人們直接瀏覽包含頁面的問題。這也將使您的應用程序運行得更快,因為您只需創建一次user-security.cfc實例,即可用於每個頁面請求上的每個用戶。

編輯從這里開始

在評論中,Adam Cameron說:“而且,onRequestStart()已經收到了被請求的文件名作為參數;我認為,不需要使用CGI范圍來獲取它”。 這對我來說是個新聞,所以我認為我會檢查一下。

我運行了具有此功能的頁面。

<cffunction name="onRequestStart" access="public" returntype="boolean">
<cfdump var="#arguments#">
<cfreturn true>
</cffunction>

這給了我一個鍵1,值顯示了我實際運行的頁面的路徑。 因此,以錯誤的順序執行操作時,我閱讀了docs 按照這些准則,我將其添加到上面的代碼中:

<cfargument name="targetPage" required="yes">

毫不奇怪,轉儲給出了具有相同值的TARGETPAGE鍵。 然后,我將參數的名稱更改為“ fred”。 轉儲為我提供了具有相同值的FRED密鑰。

最重要的是,無論您使用發送到頁面的參數還是cgi范圍,都仍然必須使用ListLast來獲取頁面的名稱。

創建一個index.cfm頁面,該頁面基本上由一個很大的switch語句組成。 您的URL是action.subaction,即index.cfm?action = email.send。 在index.cfm中進行解析。 然后針對每種情況,根據需要檢查安全規則和cfinclude。 但是,是的,您確實需要學習一個框架。 FW / 1可以滿足您的需求,而且易於學習。 我相信Coldbox也具有極簡版本。

<cfinclude>將對具有任何擴展名的任何文件起作用。 作為標准慣例,我將所有包含*.cfi

在FW / 1世界中,這特別有用。

我可以有目錄

views/reports/home.cfm
views/reports/details.cfm
views/reports/header.cfi

有效鏈接包括

index.cfm/reports/home
index.cfm/reports/details

index.cfm/reports/header

什么也沒做

這樣做可以與其他開發人員交流我打算對該文件進行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM