どのようにオーバーライドSQLの除菌にColdFusion
-
06-09-2019 - |
質問
私に残念なタスクの清掃気の古ColdFusionます。クエリはすべてに取り組んで移動しているすべてに共通のフロン類のため、メンテナンスが容易です。
私はラインの問題が cfquery
自動的に変換するシングルクォーテーションダブルシングル-ます。たいのですがオーバーライドするでしょうか?
より具体的な情報は以下となります。
そこではクエリの開始していますの:
<cfquery name="getObjectInfo" datasource="#BaseDS#">
SELECT groupName AS lastname, '[Group]' AS firstname
FROM groups
WHERE groups.group_id = #objectreference_id#
</cfquery>
しかもこのリテラルでは"選択"で我々がしたい表示されていることを示すもんの書きこんでも清潔なので少).このように共通の機能、どうぞお気軽にお問い合わせくのパラメータの選択項:
<cffunction name="fSelGroup" access="public" returntype="query"
hint="Returns query selecting given group.">
<cfargument name="intGroupID" type="numeric" required="true"
hint="ID of group to be returned." />
<cfargument name="strSelectAttributes" type="string" required="false"
hint="Attributes to be selected in query"
default="*" />
<cfquery name="getObjectInfo" datasource="#Application.DataSource#">
SELECT #Arguments.strSelectAttributes#
FROM Groups
WHERE Group_ID = #Arguments.intGroupID#
</cfquery>
<cfreturn getObjectInfo />
</cffunction>
こちらではの問題:場していただくために "GroupName AS LastName, '[Group]' AS FirstName"
のstrSelectAttributesパラメータのクエリーに送信されるデータベース:
SELECT GroupName AS LastName, ''[Group]'' AS FirstName
FROM Groups
WHERE Group_ID = 4
というのは、私の引用した"消毒"を無効を返します。
解決
ColdFusion逃がしません すべての シングルクォーテーションは、そのクエリを通じて可変献しています。これは罪を犯した:
SELECT #Arguments.strSelectAttributes#
これは通常のものも小さいの防衛線"SQLインジェクション攻撃であった。いルール番号は(ここでは、随所に他):なをSQL文字列から変数です。
の場合 積極的にして 利用の変数をSQL文字列がすべて悪影響の可能性、使用の PreserveSingleQuotes()
機能:
SELECT #PreserveSingleQuotes(Arguments.strSelectAttributes)#
この機能を停止しColdFusionから自動脱出のシングルクォーテーション.
その他の機能の呼び出しに同じことにあります。う:
SELECT #LCase(Arguments.strSelectAttributes)#
このPreserveSingleQuotes()"って本当は何もしません。ることに文字列関数の結果を防止し、自動変数の補間通常の部品が追加されています。
他のヒント
を入れて呼び出preserveSingleQuotes()の周囲で可変となります。で行った実際の実験の値の間には書面での動的SQL.また、本当に、本当にすべき使用cfqueryparamお値に拡げていきたいと思っていま菌のご入力をなんとかなる論争することができます。strSelectAttributesきれい';落下表グループます。
<cfquery name="getObjectInfo" datasource="#Application.DataSource#">
SELECT #preserveSingleQuotes(Arguments.strSelectAttributes)#
FROM Groups
WHERE Group_ID = <cfqueryparam value="#Arguments.intGroupID#" cfsqltype="cf_sql_integer"/>
</cfquery>
また、コードの一に変換するスパゲッティへの格納手続き