2009-08-27 79 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