2009-08-27 39 views
4

我有一个模板,我正在通过jQuery进行ajax调用。我传递称为“方法”的URL参数,然后通过各种方法做一个<cfswitch>,以确定哪些代码块来执行。只能通过ajax调用才能访问.cfm模板?

问题是,我不希望这页是Ajax调用的外部访问。换句话说,如果有人在浏览器中输入网址,我不希望模板运行。

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

+3

应该说,有没有办法让一个100%的保证。有许多方法可以让浏览器看起来像* AJAX请求,并且可以使用像cURL这样的命令行工具来完成它。如果您出于安全目的而依赖以下任何答案,请勿。 – Kip 2009-08-28 02:10:40

+0

正式注意。这并不是超级重要的,直接击中模板并不会造成真正的伤害,只是想阻止任何基本的窥探。感谢您的高抬头! – jyoseph 2009-08-28 21:57:05

回答

8

jQuery的注入用X-Requested-With头具有值“的XMLHttpRequest”中设置的请求。在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> 
5

如果您使用CF8, “这有一个功能”。 :)

客户端:用于填充视图(即CFDIV,cfwindow,CFGRID,cfinput ...)

服务器端使用cfajax标签:您.CFM模板中使用VerifyClient()

OR:

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

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

+2

+1苹果商业 – andrewWinn 2009-08-27 18:04:33

+0

的私生子和一个很好的答案 – andrewWinn 2009-08-27 18:05:11

+0

我很欣赏与verifyClient()的意见,我不知道!我已经离开了Coldfusion为jQuery提供的内置ajax。但是我给了你一个明确的答案,我可能最终不得不在某一天使用它。谢谢! – jyoseph 2009-08-28 21:54:42

1

这些都不能忠实地保护你,它只是停止无心,积极主动的人(haxors在那里)可以欺骗是通过使用包含在请求平凡任何头一个像Live HTTP Headers的浏览器插件。

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

在最好的情况,你将留下不是安全多一点含糊。

+0

这是正确的,但已经有一个注释说明了同样的事情,和OP的回应是,停止“无心”就足够了。 – 2009-11-06 02:21:02

+0

在开始我的帖子后,我注意到了这条评论,但觉得还有一些值得引用的工具,这对某些情况下的调试或测试也很有帮助,并指出这些天调整标头是多么容易。 – np0x 2009-11-06 02:26:20