2009-07-30 15 views
5

Con ColdFusion MX7 si encontramos una excepción, enviamos un correo electrónico al equipo de desarrollo que contiene volcados de los distintos ámbitos de datos, incluida la estructura del formulario.¿Es modificable la etiqueta CFDUMP?

Esto funciona muy bien para la depuración, excepto en el caso de un error cuando el usuario inicia sesión. Terminamos obteniendo la contraseña impresa.

Entonces, la pregunta es, ¿hay alguna manera de modificar el archivo CFDUMP para que filtre el valor de la contraseña fuera del objeto de formulario?

Naturalmente, podríamos ponerlo en el mismo código que envía el correo electrónico, sin embargo, sería ideal para ponerlo en el archivo CFDUMP para que no tengamos que preocuparnos de que aparezca en otros lugares.

He localizado el archivo CFDUMP y parece ser binario, así que supongo que no podemos hacerlo.

+0

Realmente no resolvería su problema, incluso si estuviera en CF8, pero vale la pena señalar: :-) –

Respuesta

6

puede copiar el archivo dump.cfm a dumporiginal.cfm, y luego hacer una nueva dump.cfm que llama dumporiginal.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

Solo probé en CF8, pero en teoría debería funcionar en CF6/7/8 +. –

+0

BTW, en mi máquina (edición del desarrollador CF8 en OS X) encontré dump.cfm en/Applications/ColdFusion8/wwwroot/WEB-INF/cftags –

3

No, no creo que haya una forma de modificar el comportamiento de <cfdump>. No puedo estar seguro, obviamente. Es pensable que existe tal truco, aunque no es necesariamente recomendable.

por qué no ir con un simple:

<cftry> 
    <cfset DoSomethingThatFails()> 

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

Eso es lo que supongo. La razón es básicamente para que se sustituya en instancias que no se esperan. Si alguien simplemente tira un volcado para una prueba o algo así. –

+0

Ah, y su ejemplo realmente cambia el valor de la contraseña, que probablemente no sea un problema porque está en una situación de error. Sin embargo, es mejor duplicar la estructura primero. –

+0

Sí, fue principalmente para aclarar mi punto. Si no puedes confiar en las personas que mantienen el sistema, de todos modos estás jodido, en mi humilde opinión. – Tomalak

1

cfdump comenzó su vida como una etiqueta personalizada (CF_DUMP) allá por los días CF5. Siempre puede obtener el código de esa etiqueta personalizada, modificarla según sus necesidades y usarla en lugar de la etiqueta incorporada.

Cuestiones relacionadas