2009-07-30 3 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

BTW, 내 컴퓨터 (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

그래, 주로 내 요점을 분명히했다. 시스템을 유지 관리하는 사람들을 신뢰할 수 없다면 어쨌든 망한다. – Tomalak

1

CFDUMP는 CF5 일 동안 맞춤 태그 (CF_DUMP)로 다시 시작되었습니다. 해당 사용자 정의 태그의 코드를 가져 와서 필요에 맞게 수정하고 내장 태그 대신 사용할 수 있습니다.