我有一个模板设置,我正在通过jQuery进行ajax调用。我正在传递名为“method”的URL参数,然后执行< cfswitch>通过每种方法来确定要执行的代码块。
问题是,我不希望在ajax调用之外访问此页面。换句话说,如果有人只是将URL输入浏览器,我不希望模板运行。
有办法吗?我想在.php中有一种方法可以告诉它是什么类型的请求。 Coldfusion中是否存在这样的事情?还是有什么建议吗?
答案 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
充其量只是默默无闻而已。