Extending Encrypted ColdFusion Application.cfm Functionality

Posted August 15, 2008 at 2:11 PM by Ben Nadel

Tags: ColdFusion

We just had an interesting problem here at work. We are building an eCommerce site that needs to be shut down on certain days. Normally, this would not be a problem - we'd just put some code in the Application.cfm or Application.cfc that would check the date on each request and either render the normal page or render a "Closed" page. The problem that we came up against was that we are implementing an existing software product in which the Application.cfm file is encrypted. This means that we can't go into the file and simply add the desired functionality.

At first, I wasn't sure what to do, but then something dawned on me: the Application.cfm code does NOT need to be in an Application.cfm. Well, ultimately it does, but the code itself doesn't have to be located in a file named Application.cfm. So, what we did was rename the existing, encrypted Application.cfm to be named "EncryptedApplication.cfm". Then, we created a new Application.cfm that simply included the old Application.cfm file:

  • <!---
  • Include the template that handles the functionality and
  • display of the "Sorry, We're Closed" page.
  • --->
  • <cfinclude template="site_down.cfm" />
  •  
  • <!--- Include original Application file. --->
  • <cfinclude template="EncryptedApplication.cfm" />

This way, our "site_down.cfm" template can execute on every page request and prevent the page load, if needed. And, we don't lose the functionality of our original Application.cfm file.

Small tip, but I thought this might inspire people who are working with any off-the-shelf products that have encrypted files.



Reader Comments

Aug 15, 2008 at 2:46 PM // reply »
13 Comments

Remember that if a directory contains both Application.cfc and Application.cfm, only the CFC is run. So another option would have been to use onRequestStart() in Application.cfc. This would just avoid renaming the existing Application.cfm


Aug 15, 2008 at 2:48 PM // reply »
3 Comments

Can't you just unencrypt it? The same exe that's worked since CF5 still works doesn't it?


Aug 15, 2008 at 2:52 PM // reply »
11,238 Comments

@Adrian,

Then we would have lost all of the functionality of the Application.cfm. But yes, if we built this thing form scratch, I would go with OnRequestStart().

@Russell,

True, I could have unencrypted it, I do have the application, but I believe that would have violated the product terms of use for the eCommerce system. That changes that anything bad would have come of it are pretty much nill, but even still, this seemed like the quicker approach :)


Aug 15, 2008 at 2:55 PM // reply »
34 Comments

I'm curious: if you're allowed to say, why do they want their eCommerce site shut down on certain days?

Most online vendors tremble at the thought of their ordering system being down for even an hour or two, lest they miss a sale.


Aug 15, 2008 at 2:57 PM // reply »
3 Comments

@Ben
Ah ya, the ever elusive terms and conditions... Sorry didn't realize this was a paid for app, I was just assuming this was something a prior developer did because they thought it would help.

Technically speaking, hasn't encrypting cfm files pretty much been a worthless security effort since about 99-00?


Aug 15, 2008 at 3:01 PM // reply »
11,238 Comments

@Brian,

It's for religious reasons. There are certain days / times were the client is not supposed to be actively making money.

@Russell,

Yeah, sorry I was not clear on that. But, definitely, encrypting the file really does nothing. I (and I assume many others) have that CFDecrypt.exe program :)


Aug 15, 2008 at 3:24 PM // reply »
39 Comments

Very clever!

I'm going to use this trick next time my wife is mad because I wasn't paying attention: "I wasn't ignoring you, honey! I was just cfincluding your conversation, which allows me to do what I'm working on now while still taking in your most excellent and awe inspiring wisdom."


Aug 15, 2008 at 3:25 PM // reply »
11,238 Comments

Ha ha ha ha :)


Aug 15, 2008 at 4:20 PM // reply »
13 Comments

@Ben:

<cfcomponent hint="Application.cfc">

<cfinclude template="Application.cfm" />

<cffunction name="onRequestStart">

<!--- yadda yadda yadda --->

</cffunction>

</cfcomponent>


Aug 15, 2008 at 4:41 PM // reply »
38 Comments

Just a thought but couldn't you add an OnRequestStart.cfm to your app which checked the date as you're using Application.cfm?


Aug 15, 2008 at 5:41 PM // reply »
11,238 Comments

@Adrian,

Good thought, but unfortunately, the two don't jive well together:

http://www.bennadel.com/index.cfm?dax=blog:731.view

@John,

Is there an OnRequestStart.cfm? Or do you mean like a custom page in the app?


Aug 16, 2008 at 6:03 AM // reply »
38 Comments

Sorry, Commented a bit too late last night (on UK time)! I meant that you would probably need to put the cfinclude that Adrian suggested in the OnRequestStart method of Application.cfc


Jul 17, 2009 at 2:11 PM // reply »
2 Comments

Do you know of any way to use this trick to "extend" Application.cfm (analogous to what Application.cfc lets you do?)

e.g. you have:
/root/Application.cfm (general application stuff)

/root/mySubSection/Application.cfm (want to include root Application.cfm along with some sub section specific stuff.)

I tried <cfinclude template="/Application.cfm" /> but that did not have the desired effect.


Jul 18, 2009 at 12:53 PM // reply »
11,238 Comments

@Mike,

Maybe use a relative path:

<cfinclude template="../Application.cfm" />

What error is it giving you?


Jul 20, 2009 at 12:06 PM // reply »
2 Comments

@Ben Nadel,

Thanks! Using a relative path worked perfectly.

When I used an absolute path I was getting CF debug output in the content panel of the page - that may be specific to our Application.


Feb 4, 2012 at 12:17 PM // reply »
1 Comments

You can't always decrypt CFM files anyway. I have a product I'm using, and some of the key components are encrypted with some sort of key, or hash or something, and running it through any of the decryption software just does nothing.

So, this post helped me greatly in modifying something encrypted.



Post A Comment

Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.

Please review the following issues:

Author Name:


Author Email:

Author Website:

Comment:

Supported HTML tags for formatting: <strong>bold</strong>   <em>italic</em>   <code>code</code>







  • Help Wanted - Find Your Next ColdFusion Job
Ben Nadel's Company - Epicenter Consulting Recent Blog Comments
May 21, 2013 at 7:46 PM
Using Plupload For Drag & Drop File Uploads In ColdFusion
No luck. At least I have uncovered the cause, URLScan 3.1. Here is what I see in the IIS log when a file is over 30mb. 2013-05-21 23:29:05 10.105.45.128 GET /plupload/assets/jquery/jquery-1.8. ... read »
May 21, 2013 at 6:12 PM
Using Plupload For Drag & Drop File Uploads In ColdFusion
Ben, I did not see you after Pete Freitag's Lockdown session at cfObjective but he said that IIS sets file size limits at 30MB by default which just happened to be the threshold for file size when ... read »
May 21, 2013 at 11:51 AM
Ask Ben: Parsing Very Large XML Documents In ColdFusion
Looking at my first ever XML document that I have to parse and put into MS SQL 2000 with CF8. I get it to list the desired Field name, many times over, and have a long list of this field name displa ... read »
May 21, 2013 at 9:25 AM
Turning Off and On Identity Column in SQL Server
you are awesome..i am lucky to get this blog between such a garbage one....Thanks, Prashant ... read »
May 20, 2013 at 4:38 PM
Using A Dynamic Column Name With ValueList() In ColdFusion
@Dana, Your confusion is well founded, since this is a very confusing features. In fact, it ONLY works if you use array notation. Meaning, that this: arrayToList( query[ "columnName" ] ) ... read »
May 20, 2013 at 4:34 PM
Using A Dynamic Column Name With ValueList() In ColdFusion
I was thinking chicken and the egg, I wouldn't have expected it to work in the valuelist going in I guess. Maybe I just need a beer, long day :) ... read »
May 20, 2013 at 4:29 PM
Using A Dynamic Column Name With ValueList() In ColdFusion
@Dana, That's if you're trying to reference a specific row. In this case, we're trying to reference the entire query column as one cohesive value. So, you are correct that if you wanted to output a ... read »
May 20, 2013 at 4:24 PM
Using A Dynamic Column Name With ValueList() In ColdFusion
I thought when you used array notation to reference queries you always had to have the row or it would throw a similar error as well? ... read »
InVision App - Prototyping Made Beautiful With Prototyping Tools