0

所以我有一个远程 ColdFusion 功能,例如:

remote string function name (required numeric varname){

这是通过 AJAX 调用访问的。Google 已自行将垃圾/空白值传递给此远程函数的 URL。我怎样才能优雅地处理那些让机器人/用户设法获得垃圾价值的东西。我尝试在函数周围/内部放置 try/catch 并且不起作用。我也尝试过设置默认值,但仍然出现错误。我希望能够返回错误消息。

想法?

现在:

domain.com/path/to/page.cfc?method=function&varname=

正在抛出错误

domain.com/path/to/page.cfc?method=function&varname=5

正在按预期工作。

4

2 回答 2

4

更新:

我将这里留给后代,因为它通过验证解释了错误的原因和事件链。但是,亚当的回应是 IMO 的正确解决方案。


remote string function name (required numeric varname){

我尝试在函数周围/内部放置 try/catch 并且不起作用。

因为参数值在CF 执行函数内部的任何内容之前被验证。所以它甚至永远不会到达try/catch.

如果要允许非数字值,则必须将参数类型设置为并在函数内部string执行验证。IE

      // use whatever check is appropriate here
      if ( IsNumeric(arguments.varname) ) { 
          // good value. do something
      }
      else {
          // bad value. do something else
      }

我也尝试过设置默认值,但仍然出现错误

domain.com/path/to/page.cfc?method=function&varname=

更新 它不起作用的原因是因为该varname参数确实存在。它的值是一个空字符串。只要传递了某个值(即使是空字符串),default它就会被忽略。

于 2013-03-28T17:41:20.507 回答
3

我不同意接受的解决方案是这里最好的方法。

首先,如果您的方法需要一个数字并且它被传递一个字符串,那么错误正是这里的正确反应。对于传递无效值的请求,您不应该感到需要缓解。把它想象成有人向http://some.domain/path/to/file/wrongOne.html发出请求(他们应该请求http://some.domain/path/to/file/rightOne.html).. . 事情在那里返回 404“错误”是完全可以的,不是吗?在这种情况下,错误响应是完全正确的。

同样,您已经规定,对于您的远程调用 URL,该参数应该是数字。所以如果它不是数字......那一个错误条件。因此,您的服务器返回 500 类型的错误实际上是正确的做法。

这是“垃圾进,垃圾出”规则的一个例子。

如果您正在寻找一个优雅的解决方案,我会说您已经有了最优雅的解决方案。不要乱写特殊代码来处理不正确的请求。这不是一个优雅的方法。

你最好让事情出错,因为那样请求 URL 的机制将停止这样做。乱来,以便您返回一个“OK”200 OK的请求是错误的做法。

错误 - 当它们是正确的结果时 - 很好。他们没有任何问题。

于 2013-03-28T20:28:22.153 回答