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

imt*_*tts 7 coldfusion coldfusion-9

一些背景:

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

问题:

我不小心设置了一些远程CFC功能,public而不是remote在远程调用时意识到它们仍在工作.

正如您在下面所看到的,我的实现onCFCRequest()为我的整个应用程序创建了一个巨大的安全漏洞,其中HTTP请求可用于public在任何HTTP可访问的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)');
    }
Run Code Online (Sandbox Code Playgroud)

在远程调用的CFC中:

    public any function publicFunction(){
        return 'Public function called remotely!';
    }
Run Code Online (Sandbox Code Playgroud)

题:

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

Ada*_*ron 6

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

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

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

我在博客上写了一个关于问题和解决方案的描述.正如在下面的评论中所观察到的,我在那里使用了一些代码 - invoke()这只适用于CF10 +,但一般技术保持不变.