2009-03-24 10 views
1

テーブル名とカラム名が別のColdFusionクエリから渡されるJOIN文のセットを動的に構築する必要があります。文字列の値を文に渡すとき、CFQUERYPARAMはその前後に一重引用符を追加します。これはCFQUERYPARAMのポイントの一部です。これがSQL文を壊すと、この場合はCFQUERYPARAMを使用せず、入力クエリがクレンジングされていることを確認するか、CFQUERYPARAMを使用できる方法があるかどうかを確認してください。 (ヒューズボックスで回路/ヒューズのパーミッションを使ってこれらのコードをロックすることができます)CFQUERYPARAMを使用してSQLでテーブル/カラム名を指定する

ありがとう。

+0

私は単引用符がSQLを壊す理由を理解していませんが、CF_SQL_VARCHARのためにそれらを配置するだけです。どのようにクエリを壊すのですか? – kevink

+0

このタグの使用は、パフォーマンスではなくサニタイズの安全性チェックで、使用される変数はvarcharです。 SQL(列またはテーブル名)の値以外のものとして渡されているため、一重引用符では列/テーブルの検索ができません。 –

答えて

3

cfqueryparamは一重引用符を追加しません。バインド変数を使用します。

「動的にJOIN文のセットを作成する」という声明は瞬時に疑わしいです。動的に結合していると、正しく動作しているようには思えません。

しかし、テーブル/カラム名、あなた一度のために間違いなく完全に消毒されている - cfqueryparamが機能しないと、あなたがCF変数が必要な場合 - その後、はい、あなたは直接CF変数を使用することができます。

注:安全にサニタイズするには、rereplacenocase(table_name,'[^a-z_]','','all')を使用して、a〜zおよびアンダースコア以外のすべてを削除します。

+0

Peterに感謝します。新しいデータが追加されたときにメインテーブル構造とルックアップテーブルが変更される可能性があるという点で#673805に関連しているため、静的な結合セットでは不十分です。私は、これはデータ操作のためのバックエンド/ローカルアプリケーションであり、公共の使用ではないことを指摘しておきます。 –

+0

私は、正規表現は文字、数字、アンダースコアとなる[^ \ w] +であることを提案しています。 –

+0

\ wは単語の文字です - 必ずしも[a-z0-9_]であるとは限らず、私は意図的により汎用的なものをここで使いました。しかし、あなたが単語の文字ルートに満足していれば、\ Wは[^ \ w]よりも単純で意味が同じです。 –

1

単一引用符を2つ使用してエスケープできます。 preserveSingleQuotes関数を使用することもできます。

関連する問題