今回の患者Aさんは、<cfquery>で取得した結果を<cfdump>で確認していました。想定通りの結果を取れた事を確認し、<cfdump>をコメントアウトしました。この後にSQL文を変更する人のために残しておいたそうです。
<cfquery datasource="cfartgallery" name="qArt"> SELECT * FROM ART WHERE ARTNAME Like '%a%' </cfquery> <!-- ちゃんとDBからデータが取れているかを知りたいときは cfdumpのコメントをはずせば良いよぉぉぉぉ! 親切なAより--> <!-- <cfdump var="#qArt#"> -->
もちろん、画面でデバッグが表示されなくなったことも確認。この時はこれで大丈夫と思っていたそうです。」
この問題に気がついたのは、後日同じページのプログラムを修正してた上司のBさんでした。Bさんのとても慌てた様子にAさんも何事かと思いましたが、心当たりもないため、静観していました。
そしてBさんは、Aさんを自分の席に呼び、画面を見せました。
その画面がこちらです。
ブラウザのソースコード画面には自分が残したコメントが表示されていました。最初、Aさんは自分が書いたコメントの内容が軽すぎる事に注意されていると思ったそうです。しかし、その後Bさんが画面をスクロールすると、事の重大さに気がつきます。
・・・
ブラウザのソースには、<cfdump>の実行結果、つまり、実行したSQLのSELECT文(つまりテーブル情報や列の情報)や、取得したDBのデータも含まれていたのです。
今回の原因は、<cfdump>をコメントアウトするときに、ColdFusionコメント(<!--- 〜 --->)ではなく、間違ってHTMLコメント(<!-- 〜 -->)を記述してしまった事です。
HTMLのコメント機能は、ブラウザの画面に表示されないものの、ソースコードには記述したコメントがそのまま含まれています。中にはちょっとした遊び心で、コメントに隠しメッセージを入れていることが話題になることもあります。
ただしColdFusionは、ブラウザで表示される前にサーバー側で処理されるもの。たとえCFタグやCF関数をHTMLコメントで囲ったとしても、それはあくまでもブラウザ側での処理であって、CFタグやCF関数の処理には関係がありません。なので、そのままColdFusionで処理が行われてしまう事に注意が必要でした。
似たような間違いとしては、仮の値を<cfset>などでセットして、それを後からコメントアウトした場合などです。
〜 本番の処理(動的な処理を行って変数Aに結果を格納)〜 <!-- テスト時は仮データを変数Aに指定して確認 --> <!-- <cfset A=1> -->
<cfset A=1>を誤ってHTMLコメントにしているため、本番に移行した後も変数Aに1をセットする処理(<cfset A=1>)が引き続き行われて、仮データが上書きされてしまっています。
ColdFusionコメント(<!--- 〜 --->)を指定したら、コメントアウトした範囲のCFタグやCF関数の処理を行わなくし、ブラウザにもコメントの部分は返しません。開発の効率やコードの品質を高めるために有効な使い方をして下さい。
上記のケースは、本番移行前のテストデータの段階で上司Bさんが気付いたので、大きなトラブルには発展しませんでした。
ただ、上司Bさんによる発覚が無いまま本番に移行して、実行したSQL文や取得データがソースコード内で丸見えの状態になっていたら。。。と思うとAさんは今でもゾッとするそうです。