我有一個模板,我正在通過jQuery進行ajax調用。我傳遞稱爲「方法」的URL參數,然後通過各種方法做一個<cfswitch>,以確定哪些代碼塊來執行。只能通過ajax調用才能訪問.cfm模板?
問題是,我不希望這頁是Ajax調用的外部訪問。換句話說,如果有人在瀏覽器中輸入網址,我不希望模板運行。
有沒有辦法做到這一點?我想在.php中有一種方法可以告訴它是什麼類型的請求。在Coldfusion中是否存在這樣的事情?或者有什麼建議?
我有一個模板,我正在通過jQuery進行ajax調用。我傳遞稱爲「方法」的URL參數,然後通過各種方法做一個<cfswitch>,以確定哪些代碼塊來執行。只能通過ajax調用才能訪問.cfm模板?
問題是,我不希望這頁是Ajax調用的外部訪問。換句話說,如果有人在瀏覽器中輸入網址,我不希望模板運行。
有沒有辦法做到這一點?我想在.php中有一種方法可以告訴它是什麼類型的請求。在Coldfusion中是否存在這樣的事情?或者有什麼建議?
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>
如果您使用CF8, 「這有一個功能」。 :)
客戶端:用於填充視圖(即CFDIV,cfwindow,CFGRID,cfinput ...)
服務器端使用cfajax標籤:您.CFM模板中使用VerifyClient()
OR:
客戶端:使用<cfajaxproxy>
構建JS到遠程代理CFC
服務器端:使用<cffunction name="remoteMethod" access=remote verifyClient="true">
+1蘋果商業 – andrewWinn 2009-08-27 18:04:33
的私生子和一個很好的答案 – andrewWinn 2009-08-27 18:05:11
我很欣賞與verifyClient()的意見,我不知道!我已經離開了Coldfusion爲jQuery提供的內置ajax。但是我給了你一個明確的答案,我可能最終不得不在某一天使用它。謝謝! – jyoseph 2009-08-28 21:54:42
這些都不能忠實地保護你,它只是停止無心,積極主動的人(haxors在那裏)可以欺騙是通過使用包含在請求平凡任何頭一個像Live HTTP Headers的瀏覽器插件。
https://addons.mozilla.org/en-US/firefox/addon/3829
在最好的情況,你將留下不是安全多一點含糊。
這是正確的,但已經有一個註釋說明了同樣的事情,和OP的迴應是,停止「無心」就足夠了。 – 2009-11-06 02:21:02
在開始我的帖子後,我注意到了這條評論,但覺得還有一些值得引用的工具,這對某些情況下的調試或測試也很有幫助,並指出這些天調整標頭是多麼容易。 – np0x 2009-11-06 02:26:20
應該說,有沒有辦法讓一個100%的保證。有許多方法可以讓瀏覽器看起來像* AJAX請求,並且可以使用像cURL這樣的命令行工具來完成它。如果您出於安全目的而依賴以下任何答案,請勿。 – Kip 2009-08-28 02:10:40
正式注意。這並不是超級重要的,直接擊中模板並不會造成真正的傷害,只是想阻止任何基本的窺探。感謝您的高擡頭! – jyoseph 2009-08-28 21:57:05