Можно ли изменить тег CFDUMP? - PullRequest
5 голосов
/ 30 июля 2009

В случае ColdFusion MX7 в случае возникновения исключения мы отправляем электронное письмо команде разработчиков, содержащее дампы различных областей данных, включая структуру формы.

Это прекрасно работает для отладки, за исключением случая ошибки при входе пользователя в систему. В итоге мы получаем распечатанный пароль.

Итак, вопрос в том, есть ли способ изменить файл CFDUMP, чтобы он отфильтровывал значение пароля из объекта формы?

Естественно, мы могли бы поместить его в тот же код, который отправляет электронное письмо, однако было бы идеально поместить его в файл CFDUMP, чтобы нам не приходилось беспокоиться о его появлении в других местах.

Я обнаружил файл CFDUMP, и он кажется двоичным, так что, полагаю, мы не сможем это сделать.

Ответы [ 4 ]

6 голосов
/ 30 июля 2009

Вы можете скопировать файл dump.cfm в dumporiginal.cfm, а затем создать новый dump.cfm, который вызывает 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>
3 голосов
/ 30 июля 2009

Нет, я не думаю, что есть способ изменить поведение <cfdump>. Я не могу быть уверен, очевидно. мыслимый , что такой взлом существует, хотя не обязательно рекомендуемый .

Почему бы не пойти с простым:

<cftry>
  <cfset DoSomethingThatFails()>

  <cfcatch>
    <cfif StructKeyExists(FORM, "Password")>
      <cfset FORM.Password = "***">
    </cfif>
    <cfdump var="#FORM#">
  </cfcatch>
</cftry>
1 голос
/ 30 июля 2009

CFDUMP начал свою жизнь как пользовательский тег (CF_DUMP) еще в дни CF5. Вы всегда можете получить код для этого пользовательского тега, изменить его в соответствии со своими потребностями и использовать его вместо встроенного тега.

0 голосов
/ 30 июля 2009

Только пароль показывает проблему? Если так, возможно, решение состоит в том, чтобы солить / хэшировать пароль? В любом случае это хорошая практика.

http://blog.mxunit.org/2009/06/look-ma-no-password-secure-hashing-in.html

...