只能通过ajax调用访问.cfm模板?

时间:2009-08-27 17:44:12

标签: jquery ajax coldfusion

我有一个模板设置,我正在通过jQuery进行ajax调用。我正在传递名为“method”的URL参数,然后执行< cfswitch>通过每种方法来确定要执行的代码块。

问题是,我不希望在ajax调用之外访问此页面。换句话说,如果有人只是将URL输入浏览器,我不希望模板运行。

有办法吗?我想在.php中有一种方法可以告诉它是什么类型的请求。 Coldfusion中是否存在这样的事情?还是有什么建议吗?

3 个答案:

答案 0 :(得分:8)

jQuery使用值为“XMLHttpRequest”的X-Requested-With标头注入请求。在coldfusion中,您可以通过转储HTTP请求来查看:

<cfdump var="#getHTTPRequestData()#">

因此,您需要做的就是测试该标头,例如:

<cfset reqData = getHTTPRequestData()>
<cfif structKeyExists(reqData.headers,"X-Requested-With") and reqData.headers["X-Requested-With"] eq "XMLHttpRequest">
    Got an ajax request
<cfelse>
    <!--- do something else, or nothing --->
</cfif>

答案 1 :(得分:5)

如果你正在使用CF8,“它有一个功能”。 :)

客户端:使用填充视图的cfajax标记(即cfdiv,cfwindow,cfgrid,cfinput ...)

服务器端:在.cfm模板上使用VerifyClient()

OR:

客户端:使用<cfajaxproxy>将JS构建到远程CFC代理

服务器端:使用<cffunction name="remoteMethod" access=remote verifyClient="true">

答案 2 :(得分:1)

这一切都不会真正保护你,它只能阻止无动机,有动力的人(那里的haxors)可以通过使用像Live HTTP Headers这样的浏览器插件来欺骗任何包含在请求中的标题。

https://addons.mozilla.org/en-US/firefox/addon/3829

充其量只是默默无闻而已。