2011-07-20 1 views
2

可能性の重複を単一引用符をエスケープされない:私は挿入時にBeanを参照するためにゲッターを使用しようとしています
Coldfusion adding extra quotes when constructing database queries in stringsCFQUERYが正しく

すべて、

。 CFは 'form.title'の値で一重引用符を正しくエスケープしていないため、誤ったSQLエラーが発生します。

アイデア?

ここにコードがあります。あなたがそのようにやろうとしている場合は

<cfscript> 
form.title = "page's are awesome"; 

page = new model.page.page(argumentCollection = form); 

<cfquery name="test" datasource="ksurvey"> 
insert into page(title) 
values('#page.getTitle()#') 
</cfquery> 

答えて

14

は、あなたはどのようにあなたがすべき程度の標準的な注意点を挿入し、preserveSingleQuotes()もちろん

INSERT INTO page(title) VALUES ('#preserveSingleQuotes(page.getTitle())#')

が必要cfqueryparamを使用してSQLインジェクション攻撃を回避してください。参考のため

INSERT INTO page(title) VALUES (<cfqueryparam value="#page.getTitle()#" cfsqltype="cf_sql_varchar" />)

+0

ちょっとチャーリー、すごくお返事ありがとう。 いつものように、投稿した直後に私はこれを考え出しました。私はqueryparamとpreservesinglequotesをしようとしていたと私のアプリをリフレッシュしていたが、運がない。 URLにリロードの代わりにリフレッシュを渡していたのがわかりました。 実際に私の質問への答えであるにもかかわらずあなたの答えをマークしてください:) もっとコーヒーが必要です! - ありがとう – jason

3

私はcfqueryparamの、その安全ではないを使用せずにデータベースに任意の値を挿入しないだろう!それだけでなく、cfqueryparamがあなたのためにエスケープするすべてを処理します。

<cfquery name="test" datasource="ksurvey"> 
    insert into 
     page(title) 
    values(<cfqueryparam value="#page.getTitle()#" cfsqltype="cf_sql_varchar">); 
</cfquery>