7

一些背景:

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

问题:

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

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

复制代码:

在 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!';
    }

问题:

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

4

1 回答 1

6

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

(注意:我已经犯了完全相同的事情,所以我没有去@你;-)

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

我已经在我的博客上写了对问题和解决方案的描述。正如在下面的评论中所观察到的,我在其中使用了一些代码 -invoke()仅适用于 CF10+,但一般技术保持不变。

于 2013-04-19T22:34:47.983 回答