SQL インジェクションの欠陥に対する典型的な制御は、バインド変数 (cfqueryparam タグ)、文字列データの検証、および実際の SQL レイヤーのストアド プロシージャを使用することです。これはすべて問題なく、同意しますが、サイトがレガシー サイトであり、多くの動的クエリを備えている場合はどうでしょうか。次に、すべてのクエリを書き直すのは非常に困難な作業であり、回帰テストとパフォーマンス テストに長期間を費やす必要があります。実際の実行のために cfquery を呼び出す前に、動的 SQL フィルターを使用してそれを呼び出すことを考えていました。
CFLib.org ( http://www.cflib.org/udf/sqlSafe )で 1 つのフィルターを見つけました。
<cfscript>
/**
* Cleans string of potential sql injection.
*
* @param string String to modify. (Required)
* @return Returns a string.
* @author Bryan Murphy (bryan@guardianlogic.com)
* @version 1, May 26, 2005
*/
function metaguardSQLSafe(string) {
var sqlList = "-- ,'";
var replacementList = "#chr(38)##chr(35)##chr(52)##chr(53)##chr(59)##chr(38)##chr(35)##chr(52)##chr(53)##chr(59)# , #chr(38)##chr(35)##chr(51)##chr(57)##chr(59)#";
return trim(replaceList( string , sqlList , replacementList ));
}
</cfscript>
これは非常に単純なフィルターのようですが、それを改善する方法やより良い解決策を考え出す方法があるかどうか知りたいですか?