2009-07-30 25 views
5

ColdFusion MX7では、例外が発生した場合、フォーム構造を含むさまざまなデータスコープのダンプを含む電子メールを開発チームに送信します。CFDUMPタグは変更可能ですか?

これは、ユーザーがログインするときのエラーを除いて、デバッグに最適です。パスワードの出力が終わることになります。

CFDUMPファイルを変更してフォームオブジェクトからパスワード値をフィルタリングする方法はありますか?

もちろん、電子メールを送信するのと同じコードに入れることもできますが、CFDUMPファイルに置くのが理想的です。他の場所に表示される心配はありません。

私はCFDUMPファイルを探しましたが、それはバイナリであると思われますので、私たちはそれを行うことはできません。

+0

あなたがCF8であっても、あなたの問題を解決することはできませんが、注意する価値があります。: –

答えて

6

あなたはdumporiginal.cfmするdump.cfmファイルをコピーし、dumporiginal.cfmを呼び出して新しいdump.cfmを作ることができます。

<!--- 
    So that it won't execute twice if you 
    have a closing slash (<cfdump ... />) 
---> 
<cfif thisTag.executionMode neq "start"> 
    <cfexit method="exitTag" /> 
</cfif> 


<!--- 
    defaults for optional attributes, taken from the docs 
    http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_d-e_08.html 
---> 
<cfparam name="attributes.expand" default="yes" /> 
<cfparam name="attributes.format" default="html" />  
<cfparam name="attributes.hide" default="all" />  
<cfparam name="attributes.keys" default="9999" />  
<cfparam name="attributes.label" default="" />  
<cfparam name="attributes.metainfo" default="yes" />  
<cfparam name="attributes.output" default="browser" />  
<cfparam name="attributes.show" default="all" />  
<cfparam name="attributes.showUDFs" default="yes" />  
<cfparam name="attributes.top" default="9999" />  

<!--- Hide the password, but store its value to put it back at the end ---> 
<cfif isStruct(attributes.var) and structKeyExists(attributes.var, 'password')> 
    <cfset originalPassword = attributes.var.password /> 
    <cfset attributes.var.password = "{hidden by customized cfdump}"/> 
</cfif> 

<!--- 
    Call the original cfdump. 
    Which attributes you pass depends on CF version. 
--->    
<cfswitch expression="#listFirst(server.coldfusion.productVersion)#"> 
<cfcase value="6"> 
    <cfdumporiginal 
     var = "#attributes.var#" 
     expand = "#attributes.expand#" 
     hide = "#attributes.hide#" 
     label = "#attributes.label#" 
     > 
</cfcase> 
<cfcase value="7"> 
    <cfdumporiginal 
     var = "#attributes.var#" 
     expand = "#attributes.expand#" 
     hide = "#attributes.hide#" 
     label = "#attributes.label#" 
     top = "#attributes.top#" 
     > 
</cfcase> 
<cfdefaultcase>  
    <cfdumporiginal 
     var = "#attributes.var#" 
     expand = "#attributes.expand#" 
     format = "#attributes.format#" 
     hide = "#attributes.hide#" 
     keys = "#attributes.keys#" 
     label = "#attributes.label#" 
     metainfo = "#attributes.metainfo#" 
     output = "#attributes.output#" 
     show = "#attributes.show#" 
     showUDFs = "#attributes.showUDFs#" 
     top = "#attributes.top#" 
     > 
</cfdefaultcase> 
</cfswitch> 

<!--- Restore the password, in case it's read after cfdump call ---> 
<cfif isDefined("originalPassword")> 
    <cfset attributes.var.password = originalPassword /> 
</cfif> 
+0

私はCF8でしかテストしませんでしたが、理論的にはCF6/7/8 +で動作するはずです。 –

+0

私のマシン(OS XのCF8開発版)で、/ Applications/ColdFusion8/wwwroot/WEB-INF/cftagsにdump.cfmが見つかりました –

3

いいえ、<cfdump>の動作を変更する方法はありません。私は確かに確信が持てません。このようなハックが存在すると、と考えられるですが、必ずしもがおすすめですです。

はなぜシンプルで行く:それは表示の問題があるのみで、パスワード

<cftry> 
    <cfset DoSomethingThatFails()> 

    <cfcatch> 
    <cfif StructKeyExists(FORM, "Password")> 
     <cfset FORM.Password = "***"> 
    </cfif> 
    <cfdump var="#FORM#"> 
    </cfcatch> 
</cftry> 
+0

これは私の推測です。その理由は基本的には、期待されていないインスタンスでは置き換えられるからです。誰かがテストや何かのためにダンプをつけているだけなら。 –

+0

ああ、あなたの例では実際にパスワードの値が変更されていますが、これはエラー状態にあるため問題にはならないでしょう。しかしおそらく構造体を最初に複製するほうがよいでしょう。 –

+0

ええ、それは主に私の指摘を明確にすることでした。あなたがシステムを維持する人々を信用できないなら、あなたはとにかく犯されています、IMHO。 – Tomalak

1

CFDUMPはCF5日間にカスタムタグ(CF_DUMP)として使用開始されました。あなたはいつもそのカスタムタグのコードを手に入れて、それを必要に応じて変更し、組み込みタグの代わりにそのカスタムタグを使用することができます。

関連する問題