【问题标题】:Exempting Coldfusion page from authentication使 Coldfusion 页面免于身份验证
【发布时间】:2015-10-09 20:43:50
【问题描述】:

我需要从非安全 CF 页面发布到安全 CF 页面。我不想在发送值的页面上执行并实现用户身份验证,因为这是一个相当繁琐的过程,因为这个遗留站点的设置方式,其次是因为发送值的页面充当了之间的服务两个不相关的订单管理系统,而不是一个用户。

现在,当我尝试发帖时,响应结果是重定向到主页的登录。有没有办法使发布或接收页面免于强制用户身份验证?

我正在使用<cfhttp> 将值发布到发布页面,该页面有一系列<cfparam>'s,我将这些值传递给。一旦我将这些值传递到帖子页面,就会在帖子页面触发重定向到主页时,因为帖子页面是订单管理系统中的内部页面,并在客户端登录并为它们创建会话时显示。

【问题讨论】:

  • 帖子现在如何处理,即 what 重定向到登录页面?是函数,是include,是在Application.cfc的onRequest/onRequestStart事件中处理的吗?
  • 据我所知,它在 Application.cfc 中。系统中的每个页面都会查找 clientID、userID,但会话变量是在 Application.cfc 文件中设置的。它运行一个 isDefined 函数来查看是否设置了 userID。如果是并且类型是客户端,它会在客户端上查找 companyID。如果这些都没有设置,它会设置一个 url 重定向到主页以强制用户登录,但如果它设置了,那么它会继续订单处理。

标签: coldfusion session-variables coldfusion-9


【解决方案1】:

由于您没有提供任何代码,因此您可以猜测一下它的外观以及如何为特定请求添加异常:

<cffunction name="onRequestStart" access="public" output="false" returnType="boolean">

    <cfargument name="targetPage" type="string" required="true">

    <!--- treat initialized SESSION or matching request token (rtoken) as successful authentication --->
    <cfset LOCAL.isAuthenticated = (
        isDefined("SESSION.userID")
            or
        ( structKeyExists(FORM, "rtoken") and (FORM["rtoken"] eq "some-secret-only-you-know") )
    )>

    <cfif LOCAL.isAuthenticated>

        <!--- do something... --->

    <!--- not authenticated --->
    <cfelse>

        <!--- redirect to login --->
        <cflocation url="login.cfm" statusCode="303" addToken="false">

    </cfif>

</cffunction>

现在您可以简单地将键值对 rtoken=some-secret-only-you-know(即 &lt;input type="hidden" name="rtoken" value="some-secret-only-you-know" /&gt;)添加到您的 POST 以绕过基于会话的身份验证。 免责声明:仅当 POST 参数(表单字段)由用户公开/可编辑时才使用此方法。

请随意提供实际背景,以便我以更具体的方式提供帮助。

【讨论】:

    【解决方案2】:

    我已经编写了几个具有相似但不同要求的应用程序。这是我在上一篇文章中处理这些要求的方式。所有这些代码都是Application.cfc文件中指定的方法。

    在 onApplicationStart 中:

    application.securityNotNeededPages = 
    "somePage.cfm,someOtherPage.cfm,someMorePages.cfm";
    

    在 onRequestStart 中

    var ThisPage = listlast(cgi.PATH_INFO, "/");
    ...
    if (ListFindNoCase(application.securityNotNeededPages, ThisPage) is false) {
    security related code
    }
    else {
    code for when the page does not to be secured
    }
    

    【讨论】:

    • 我经常做类似的过程。我更喜欢将页面存储为数组而不是列表。
    猜你喜欢
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多