-1

ストアド プロシージャ実行スクリプトをデータベース テーブルに格納する必要があります。

例として:

exec proc_name 'somedata'

これらは、変更されるデータがモデレーション プロセスを経た後で実行するためのものです。

ステートメントをSQLインジェクションに使用できないようにスクリプトをクレンジングする最良の方法は何ですか?

使用できるエンコーディングの特定のタイプはありますか? または、 「」で置換を行うのと同じくらい簡単ですか

4

3 に答える 3

1

次に、varchar(max)列を使用し、パラメーター用に別のテーブルを作成する必要があるようです。パラメーターを使用する場合は、SQLインジェクションから安全である必要があります。以下のquickieC#の例を参照してください。

C#疑似コード例

SQLCommand command = new SQLCommand("select * from myScripts where scriptid = @scriptid");
SQLParameter param = new SQLParameter("@scriptid", 12, int);

...new SQLCommand("select * from myParams where scriptid = @scriptid");
...new SQLParameter...

DataReader dr = new blah blah...

SQLCommand userCommand = new SQLCommand(dr['sql']);

foreach (parameter in params)
{
    userCommand.Parameter.Add(parameter['name'], value);
}

userCommand.Execute...
于 2012-04-05T02:00:39.980 に答える
0

後で実行するために、スクリプトをストアド プロシージャまたはスケジュールされたジョブに保存できます。ストアド プロシージャをエンコードする理由はわかりません。ユーザー特権を設定して、別のユーザーがそれらを読み取ったり、表示したりできないようにすることができるからです。

于 2012-04-05T01:54:19.997 に答える
0

スクリプトを「クレンジング」する方法はありません。
コードを保護する唯一の方法は、コードをデータから分離することです。そして、データのみを「クレンジング」します。

そのため、コードをデータから分離しています。
コードはしっかりしていて安全であり、データは可変であり、「クレンジング」する必要があります。

コードをデータとして扱い、この基本法則に違反しているため、コードを保護する方法はありません。

このタスクのまったくの異常さから判断すると、確かに適切な解決策があると思います。
間違ったアーキテクチャを選択するだけです。
したがって、「非常に複雑なメタデータ構造 (構造と目的が提供されている) を処理したい」などの別の質問をしたほうがよいでしょう。そうすれば、SQL コードをデータに格納する必要がない適切な解決策が得られます。

于 2012-04-05T05:31:27.000 に答える