2013-03-19 8 views
5

私はCF8からCF10への変換に取り組んでいるアプリケーションを持っています。戻ってくるデータがJSONでなければならないリモートCFCのいくつかは、 "//"は返されたデータに先行しています。例えば、ここで返された構造体の出力です:ColdFusion 10 returnformat = "JSON"文字を追加する

//{"SUCCESS":true,"ERRORS":[],"DATA":{"COLUMNS":["AUTHRESULT","SPID","EMAIL","RID"],"DATA":[[true,361541,"[email protected]",""]]}} 

CF8サーバー上で同じCFCを介して実行と同じ機能を提供します:

{"ERRORS":[],"SUCCESS":true,"DATA":{"COLUMNS":["AUTHRESULT","SPID","EMAIL","RID"],"DATA":[[true,361541,"[email protected]",""]]}} 

CFCプロキシのすべての要求がたreturnformat = "JSONを持っていること" - ただし、proxyCFCまたはproxyCFCから拡張されたCFCのいずれかにSerializeJSON()が呼び出されることはありません。

これを処理する最良の方法は何かわかりません。応答の「//」をトリミングすることは可能ですが、「正しい」とは思われません。これらの機能は私たちのアプリだけでなく、いくつかのリモートアプリケーション(http:// postsを経由しているものもあれば、jQuery Ajax呼び出しを経由しているものもある)のため、CF10の終わりでそれに対処する必要があります。

答えて

9

これはColdFusion admin, under settingsのサーバー側の設定です。 プレフィックスシリアル化JSONはです。セキュリティのためにデフォルトで有効になっています。 シリアル化されたJSON文字列の前にカスタムプレフィックスを付けることで、クロスサイトスクリプティング攻撃からJSONデータを返すWebサービスを保護します。。 ColdFusion 8サーバーでこれを無効にしていた可能性があります。私はそれをオフにすることをお勧めしません。

はレイモンド・カムデンから、この記事を参照してください - Handling JSON with prefixes in jQuery and jQueryUI

注:この設定はまたあなたのApplication.cfcファイルにsecureJSONsecureJSONPrefixを設定することにより、アプリケーションごとに設定することができます。そのことについてのドキュメント、Application variablesを参照してください。

secureJSON- リモート呼び出しに応答してColdFusion関数がJSON形式で返す値の前にセキュリティプレフィックスを追加するかどうかを指定するブール値。

デフォルト値は、Administrator Server Settings> Settingsページ(既定値はfalse)のPrefixシリアル化JSON設定の値です。この値は、cffunctionタグで上書きできます。

secureJSONPrefixからsecureJSONの設定がtrueの場合にある場合は、ColdFusionの関数は、リモート呼び出しに応じて、JSON形式で返す値の前に置くために、セキュリティの接頭辞。

デフォルト値は、Administrator Server Settings> Settingsページ(デフォルトでは// JavaScriptのコメント文字)のPrefixシリアル化JSON設定の値です。

+0

興味深いことに、それは認識していませんでした。だから、これは本当にそれを安全に保つために呼び出し側ページ/アプリケーション側で処理する必要があります。 – Steve

+0

はい、それが最適でしょう。私はちょっと調べてみましたが、私が参照した管理者設定がColdFusion 9で初めて導入されたようです。ColdFusion 8サーバーでこれが見られなかった理由がわかります。 –

+0

これも簡単なメモです。私はこの作業のjquery ajax側を取得しようと多くの時間を費やしました。最初は、jsonレスポンスから '//'を削除するために、dataFilterと正規表現でajaxSetup()を使用することを提案しました。多くの試行錯誤の後、jqueryのようです。validate()はajaxSetup()を中断させます。これにより、dataFitlerを検証ルールのリモートセクションに配置する必要があります。 – Steve

関連する問題