我有一個ColdFusion應用程序中,我希望基於某些標準來限制訪問某些網頁。目前我正在做這樣的,在的Application.cfc:ColdFusion安全性通過在Application.onRequestStart中檢查ARGUMENTS.TargetPage?
<cffunction name="OnRequestStart" access="public" returntype="boolean" output="true">
<cfargument name="TargetPage" type="string" required="true" />
<cfif not SESSION.isAdmin and REFindNoCase("/admin",ARGUMENTS.TargetPage) >
<!--- Deny non-admin access to admin pages. --->
<cfinclude template="/notauth.cfm">
<cfreturn false />
</cfif>
<cfreturn true />
</cffunction>
我最關心的是:如何脆弱的是檢查TargetPage對正則表達式的一般方法,以及是否有辦法改善這種設計的安全性?具體而言,我擔心避免「典型代表漏洞」。見here。
例如,只用REFind代替REFindNoCase將讓人們通過,如果他們去「/ ADMIN /」向右滑動上。還有其他的事情需要注意嗎?
我知道有其他的設計,就像在一個子文件夾使用其他的Application.cfc,或直接在頁面代碼做檢查。但我喜歡把我所有的安全代碼放在一個地方。因此,如果沒有辦法安全地完成上述操作,或者出於某種原因它確實是一個壞主意,那麼請僅在您的答案中提出建議。謝謝。
編輯:具體來說,我很擔心防範「規範表示漏洞。」是否ColdFusion的。規範化TargetPage不夠好,餅乾不能「欺騙」的正則表達式通過做這樣的事情「/blah/../aDmi n; /./index.cfm」? – CrazyPyro 2011-02-04 18:42:00
一些實驗似乎表明,ColdFusion(或者它前面的Web服務器)可以在URL出現在OnRequestStart中時對其進行規範化。所以正則表達式在我最後的評論結束時不應該注意那種事情。 – CrazyPyro 2011-02-16 07:06:03