首页 > 解决方案 > 如何验证 ColdFusion .cfc 页面中的有效会话和会话数据?

问题描述

我一直在开发在 ColdFusion 2016 上运行的单页应用程序。我已经开发了登录页面,现在我想为发送到.cfc页面的每个 Ajax 调用开发安全性。该文件中有很多功能,我主要关注的是检查用户会话是否存在以及登录用户是否具有AdminUser访问权限。有一组功能只能通过管理员访问权限访问。其他功能可供用户和管理员使用。这是我的 Session 范围的示例,它在成功通过身份验证后保留所有用户信息:

<cfset var appStruct = structNew()>
<cfset structInsert(appStruct, "SysAdmin", SystemAdmin, true)>
<cfset structInsert(appStruct, "UserName", UserName, true)>
<cfset structInsert(appStruct, "AccountID", AccountID, true)>
<cfset structInsert(appStruct, "Email", Email, true)>
<cfset SESSION.AccountInfo = appStruct>

上面的代码在用户登录后执行,然后我检查了我的.cfc文件顶部:

<cfcomponent>
    <cfif structKeyExists(SESSION, "AccountInfo")>
        <cfset LoggedAccountID = SESSION.AccountInfo.AccountID>
        <cfset isAdmin = SESSION.AccountInfo.SysAdmin EQ 1 ? true : false>
    <cfelse>
        <cfabort>
    </cfif>

    /* Here I have many functions that are used by Users and Administrators. */
</cfcomponent>

然后除此之外,cffunction我总是检查AccountInfo会话是否存在以及管理员权限是否设置为 true 以用于管理员功能。仅由管理员访问的功能之一的示例:

<cffunction name="findAccount" access="remote" output="false" returnformat="JSON">
    <cfargument name="sessionID" type="string" required="yes" default="fakeSession">        
    <cfargument name="frmFindaccount_search" type="string" required="yes">
    <cfset var fnResults = structNew()>
    <cfset var runProcess = true>

    <cfif !isAdmin OR !structKeyExists(SESSION, "sessionid") OR (SESSION.sessionid NEQ arguments.sessionID) OR !structKeyExists(VARIABLES, "LoggedAccountID")>
        <cfset var fnResults.status = "400">
        <cfset var fnResults.message = "Credentials Error!">
        <cfreturn fnResults>
        <cfabort>
    </cfif>
</cffunction>

我想知道上述所有步骤是否足以保护未经授权的用户访问我系统中的任何功能/数据?其他问题也是关于这段代码的:

<cfif !isAdmin OR !structKeyExists(SESSION, "sessionid") OR (SESSION.sessionid NEQ arguments.sessionID) OR !structKeyExists(VARIABLES, "LoggedAccountID")>
    <cfset var fnResults.status = "400">
    <cfset var fnResults.message = "Credentials Error!">
    <cfreturn fnResults>
    <cfabort>
</cfif>

cffunction我在每个的顶部都有这个.cfc(有些功能没有!isAdmin)。我想知道这是否只能放在我的顶部.cfc而不是在每个函数中都有这个?如果有人看到任何可以改进的代码或有任何建议,请告诉我。这是我的第一个个人项目,我正在尝试遵循标准并防止安全线程。

标签: sessionauthenticationcoldfusioncfccoldfusion-2016

解决方案


推荐阅读