1

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>

これは非常に単純なフィルターのようですが、それを改善する方法やより良い解決策を考え出す方法があるかどうか知りたいですか?

4

4 に答える 4

9

サイトが従来のもので、多くの動的クエリを備えている場合はどうでしょうか。次に、すべてのクエリを書き直すのは非常に困難な作業であり、回帰テストとパフォーマンス テストに長期間を費やす必要があります。

はい、しかし、提案しているような関数を使用するなど、重要な変更行う場合はそうです。

したがって、いくつかのテストをセットアップし、適切なフレームワークを使用するようにリファクタリングし、cfqueryparam を使用するようにクエリを修正することをお勧めします。

その特定の関数はナンセンスの集まりであり、それが主張することを実行せ、(最大長を誤って超えて) 何かを壊す可能性があります。

これはSQL インジェクション保護ではありません--&#45;&#45;'&#39;

ええ、それでもそのルートをたどりたい場合は、別の関数を見つけてください。ただし、適切なリファクタリングをお勧めします。

于 2010-06-09T06:54:22.317 に答える
3

明らかに、あなたはあなたの前にたくさんの仕事があります。しかし、袖をまくり上げるときに、インジェクション攻撃による潜在的な被害の一部を軽減するために行う可能性のある小さなことの1つは、複数のデータソースを作成し、ステートメントselectのみに制限されたデータソースを介してすべてのクエリのみを実行することselectです。また、すべてのデータソースについて、、、、、、などが無効になっていることを確認してくださいgrantrevokecreatealterdrop

于 2010-06-09T15:14:51.823 に答える
0

Portcullisを試してみてください。これは、SQL インジェクションおよび XSS 攻撃の URL、FORM、および COOKIE スコープをスキャンするために使用できるオープン ソースの CFC です。保護が保証されるわけではありませんが、クエリの書き換えに取り組んでいる間、ほとんど労力をかけずに、今日少なくともある程度の保護を提供できます。良い点は、Application.cfm/cfc に含めて、約 4 行のコードを犠牲にして、すべての CF ページ要求でスコープをスキャンできることです。

于 2010-06-10T22:09:27.540 に答える
-1

このコーディングを application.cfm ファイルに入れます。

<cfif FindNoCase(“DECLARE”,cgi.query_string) and FindNoCase(“CAST”,cgi.query_string) and FindNoCase(“EXEC”,cgi.query_string)> <cfabort showerror="おっと..!! SQL インジェクションです。" > </cfif>

http://ppshein.wordpress.com/2008/08/23/sql-injection-attacks-by-store-procedure/

http://ppshein.wordpress.com/2008/08/28/block-ip-in-coldfusion/

于 2010-08-03T08:10:47.317 に答える