2

メールを送信するアプリがメール内の特定の文字列(「スマートタグ」)を見つけて、それをストアドプロシージャの結果に置き換えるというユースケースがあります。

たとえば、電子メールDear <ST:Name>の本文に含めることができ、コードがこの文字列を識別し、ストアドプロシージャを実行して、クライアントIDをパラメータとして渡すクライアント名を見つけます。

これらのタグのリストと実行する必要のあるストアドプロシージャは現在ハードコーディングされているため、新しい「スマートタグ」を追加する必要があるたびに、コードを変更してデプロイする必要があります。

私たちのBAはSQLに精通しており、新しいタグを手動で追加できるようにしたいと考えています。

プロシージャとパラメータをデータベーステーブルに保存するのは悪い習慣ですか?これはそのようなテーブルに適したデザインでしょうか?パラメータタイプを保存する必要がありますか?

SmartTag

SmartTagId   SmartTag   StoredProcedure

SmartTagParameters

SmartTagParameterId   SmartTagId   ParameterName
4

3 に答える 3

4

テーブル駆動型構成、データ駆動型プログラミングは優れています。

注意すべき主なことはSQLインジェクションのリスクです(またはあなたの場合は「タグインジェクション」と呼ばれます...):巧妙に細工された手順を挿入することで、攻撃ベクトルとして電子メールを使用して昇格された特権を取得できます。より高い特権で実行します。実行される任意のコードをすでに受け入れているため、これはSQLインジェクションに関する通常の注意以上のものであることに注意してください。これはサンドボックスの問題です。

典型的な問題は型システムにあります。パラメータにはさまざまな型がありますが、宣言テーブルにはそれらの文字列型があります。SQL_VARIANT助けられる。

もう1つの潜在的な問題は、タグを宣言および検出するための言語です。すぐに、を認識するように求められますが<tag:foo>、その前に限り<tag:bar>ます。本格的な状況依存パーサーは通常、最初の反復の直後に続きます...すでになじみのあるものを活用することで支援できると便利です(たとえば、JQueryがCSSセレクター構文をどのように使用するかを考えてください)。HTMLAgilityPackはおそらくあなたを助けるかもしれません(そしてところで、これはSQLCLRに最適なタスクです、T-SQLで精巧なステートフルパーサーを構築しようとしないでください...)。

于 2012-11-06T09:02:24.353 に答える
1

それは悪い習慣ではありません、あなたがしていることは完全に大丈夫です。admin / BAのみがパラメーターを追加および変更し、構成を変更できる限り、インジェクションについて心配する必要はありません。ユーザーがパラメータを追加および変更できる場合は、入力を確認して特定の文字をホワイトリストに登録する必要があります。

チェックする必要があるのはSQLインジェクションだけでなく、クロスサイトスクリプティングとdomインジェクション、クロスサイトリクエストフォージェリも同様です。マージされたテキストはユーザーのコンピューターに表示されるため、マージ結果を表示するときはユーザーを保護する必要があります。

于 2012-11-06T09:05:06.887 に答える
0

興味深い質問ですが、私のものと関係があるのでフォローアップします。悪い習慣ではありません。実際、私たちは同じアプローチを使用しています。XSLエディターで同様の目標を達成しようとしています。XMLタグ、ストアドプロシージャ、およびVB.Netロジックの組み合わせを使用して置換を行っています。

使用されているすべてのXMLタグ(アプリケーションの他の場所で使用されている)と、すべてのダーティジョブを実行するストアドプロシージャを組み合わせて使用​​しています。spの1つのセットは、タグ付きのテキストからユーザーが読み取り可能なテキストに変換します。他の一連の手順では、XMLタグテーブルからXMLツリーを作成して、ユーザーがテキストの編集を選択できるようにします。

SQLインジェクションは、外部ソースからの電子メールを解析するのではなく、これらの手順を使用して電子メールを作成するため、私たちにとって問題ではありません。

質問の1つに対するコメントに関しては、少なくとも現時点では、タグをSSMSから直接管理し、管理するための管理ウィンドウはありません。ただし、タグを管理するための単純な管理ウィンドウを追加して、アプリケーションのデプロイ後にタグを追加/削除/変更するのが簡単になるようにする予定です。

于 2012-11-06T09:07:36.523 に答える