2009-08-27 2 views
4

jQuery経由でajax呼び出しを行っているテンプレートを設定しました。 "method"というURLパラメータを渡してから、各メソッドを通じて<cfswitch>を実行して、実行するコードブロックを決定します。.cfmテンプレートは、ajaxコールを介してのみアクセス可能にしますか?

問題は、このページにajax呼び出しの外部でアクセスできないようにすることです。言い換えれば、誰かがブラウザにURLを入力するだけでテンプレートを実行したくないということです。

これを行う方法はありますか?私は.phpに、それがどんなタイプのリクエストであるかを伝える方法があると考えました。このようなことはColdfusionにも存在しますか?または何か提案?

+3

100%保証はできません。ブラウザをAJAXリクエストのように見えるようにする方法がありますし、cURLのようなコマンドラインツールを使っても可能です。セキュリティ上の目的で以下の回答に頼っている場合は、しないでください。 – Kip

+0

Dulyは指摘する。超重視ではなく、テンプレートを直接打つことで実際の害が起きることはなく、基本的なスヌーピングを回避したいだけです。しかし頭をありがとう! – jyoseph

答えて

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> 
5

あなたはCF8を使用している場合は、 "そこには機能があります"。 :)

クライアント側:(すなわちCFDIV、のcfwindow、cfgridの、のcfinput ...)ビューを移入cfajaxタグを使用し

サーバー側:あなたの.CFMテンプレートにVerifyClient()を使用

は、 OR:

クライアント側:リモートCFCプロキシにJSを構築するために<cfajaxproxy>を使用

サーバ側:本当にあなたを保護します。この<cffunction name="remoteMethod" access=remote verifyClient="true">

+2

+1アップル社の商用化を犠牲にして – andrewWinn

+0

と答えが良い – andrewWinn

+0

私はverifyClient()のアドバイスを感謝します、私はそれを知らなかった!私はcoldfusionがjQueryのために提供する組み込みのajaxから離れました。しかし、私はあなたに固い答えのポイントを与えました、私はいつかそれを使用しなければならなくなるかもしれません。ありがとう! – jyoseph

1

Noneを使用していないが、それだけでやる気を停止し、意欲的なもの(そこhaxors)が使用して自明要求に含まれる任意のヘッダを偽装できライブHTTPヘッダーのようなブラウザープラグイン。

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

はせいぜいあなたは隠すことによるセキュリティのより少しで残されます。

+0

これは正しいですが、すでに同じことを説明しているコメントがあります。OPは "unmotivated"を停止すれば十分であると回答しました。 –

+0

私は投稿を開始した後でそのコメントに気付きましたが、ツールを参照する価値があると感じました。これは、デバッグやテストに役立つだけでなく、最近のヘッダーの調整が簡単であることを指摘しています。 – np0x

関連する問題