实现onCFCRequest()时,公共函数可以远程访问

时间:2013-04-19 21:21:35

标签: coldfusion coldfusion-9

一些背景:

我正在使用onCFCRequest()与常规CFM页面请求分开处理远程CFC调用。这允许我捕获错误并为所有远程请求干净地设置MIME类型。

问题:

我意外地将一些远程CFC功能设置为public而不是remote,并意识到远程调用时它们仍在工作。

正如您在下面看到的,onCFCRequest()的实现为我的整个应用程序创建了一个巨大的安全漏洞,其中可以使用HTTP请求在任何HTTP上调用任何public方法 - 可接触的CFC。

REPRO CODE:

在Application.cfc中:

    public any function onCFCRequest(string cfc, string method, struct args){
        cfc = createObject('component', cfc);
        return evaluate('cfc.#method#(argumentCollection=args)');
    }

在远程调用的CFC中:

    public any function publicFunction(){
        return 'Public function called remotely!';
    }

问题:

我知道我可以在调用方法之前检查组件的元数据,以验证它是否允许远程访问,但还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:6)

onCfcRequest()并没有真正创建安全漏洞,通过盲目运行方法创建安全漏洞而不检查是否适合首先这样做,我害怕; - )

(注意:我完全违反了同样的事情,所以我没有去@你; -

所以 - 是的 - 你需要在运行方法之前检查元数据。当您使用此处理程序时,该检查是CF传递回给您的事情之一,并已明确实现(参见3039293)。

我已在blog上写了问题说明和解决方案。正如下面的评论中所观察到的那样,我在其中使用了一些代码 - invoke() - 这只适用于CF10 +,但一般技术仍然相同。