1

MS SQL 2008:これを検索してみましたが、実際には答えが見つかりませんでした。データベースに保存する前に、すべてのユーザー入力をサニタイズして検証する必要があることは知っていますが、データベースでサイズとタイプによって制限されているフィールドにもそれが必要かどうか疑問に思っています。

たとえば、BIT タイプで 1 文字しか使用できないフィールドがいくつかある場合や、外部キーが指定されている INT フィールドがあるため、外部キーのみを保存することができます。

したがって、ユーザーに別のユーザーにメッセージを送信させるフォームでは、

  1. ラジオ ボタン BIT (連絡するはい/いいえ)
  2. 隠しフィールド (#userid# に送信) を使用して、ユーザーの ID をテーブルに配置します。
  3. DateTime フィールド (この日付に送信されたメッセージ) は自動的に入力されますが、ここに入れています。たとえば、ユーザーに時刻を設定させたとしましょう。
  4. VarChar (最大サイズ 2)、これは私が疑問に思っていることですが、2 つに制限されているだけでも、悪意のあるものを挿入できるのではないでしょうか?

これらのフィールドをデータベースに送信する前にサニタイズする必要がありますか、それともデータベースが処理して入力を拒否しますか?

私がこのすべてを尋ねている理由は、一般的に受け入れられているものと、パフォーマンス上の理由を見つけるためです。

ありがとう。

4

2 に答える 2

2

悪意のあるユーザーがデータを介して SQL クエリを変更して悪いことをするのを防ぐために、入力をサニタイズする必要があります。タイプやサイズを変更しても、システムのセキュリティに貢献するとは思いません。DBMS は、データのサイズまたはタイプが間違っている挿入を拒否します。

于 2013-03-15T01:01:17.250 に答える
1

データ型はセキュリティに対する答えではありません。データ型は、ビジネス要件に適している必要があります。たとえば、私が現在行っているように、人々がリッチ テキストの段落を使用できるようにする必要がある場合 (「リッチ テキスト」を参照)、html を取り除いた char(10) フィールドは安全ですが、役に立たない可能性があります。

SQL インジェクションについては、すでに少し説明を受けています。また、悪意のある html および javascript にも注意する必要があります。楽しみのために、これを挿入します:

<script>alert("oh dear");</script> 

あなたのデータベースに。次に、それを選択して Web ページに表示する単純な .net/php/coldfusion/whatever アプリを作成します。ドーナッツにドルを実行します。

あなたの質問はすでに回答されています。これは、考慮すべき事項です。

于 2013-03-15T02:16:05.853 に答える