-2

ユーザーがネイティブデータベースのログインに接続するアプリケーションを開発する場合、SQLインジェクションについて気にする必要はありませんか?その理由は、ユーザーがとにかく好きなSQLを実行できるからです。(管理者がCREATELOGINステートメントとCREATEUSERステートメントを実行する場所があり、これらは動的に構築する必要があります。)LAN上のネイティブWindowsアプリケーションについて話しています。

4

3 に答える 3

2

さて、SQL インジェクションは SQL を実行する可能性があるため、SQL シェル アクセスでは、「SQL インジェクション」に必要なすべてが既に承認されています。ただし、ユーザーが非管理者として実行している場合は、アクセスできるテーブルが制限されている可能性があり、より高い権限でログインしているときにシステムが追加の SQL コマンドを送信する場合 (ユーザーの作成など) に注意する必要があります。このようなコードには準備済みステートメントを使用してください。

于 2012-12-28T08:08:18.230 に答える
0

Web アプリケーションを構築し、ユーザーのデータベース資格情報を使用してデータベースに接続するという意味であれば、SQL インジェクションについて心配する必要があります。

ほとんどのデータベースは、オブジェクト (テーブル、ビュー、ストアド プロシージャなど) に基づいてアクセス許可を制限します。そのため、"Bob" としてログインしたユーザーは、テーブル "sales" にはアクセスできますが、テーブル "payments" にはアクセスできません。

データベースは、テーブル内の行へのアクセスを制限しません (たとえば)。したがって、コード内の SQL インジェクション バグを悪用できる "Bob" として接続されたユーザーは、"sales" テーブルのすべてのレコードを削除できます。あなたはおそらくそれを望んでいません。

ユーザー "Bob" も SQL に直接アクセスできる場合、もちろん SQL コマンド ラインでそのステートメントを実行するだけで済みますが、通常、SQL に直接アクセスできない場合でも Web アプリケーションを使用できます。Web アプリは最初からイントラネットに配置されている可能性がありますが、今後公開されないことを保証することはできません。

アプリの作成時に SQL インジェクション攻撃を防ぐのは簡単で、後で修正するのがどれほど面倒かを考えると、そもそもそれらを防がない本当の理由はないと思います。

于 2012-12-28T08:15:12.390 に答える
0

実際のところ、「SQL インジェクション」はよくある誤解です。クエリを適切にフォーマット
できないため、人々は言い訳として「SQL インジェクション」を考え出しました。 適切にフォーマットされたクエリは、一度に 2 つの目的を果たします。

  • どのようなデータが送信されても​​、常に構文的に正しいものになります。
  • 副作用として、悪名高い「SQL インジェクション」の影響を受けなくなります。

予期しないシンボルが原因でクエリが失敗することを望んでいるとは思えません。したがって、何らかの「注入」に関係なく、適切にフォーマットする必要があります。ただし、一度フォーマットすると、インジェクションは発生しません。したがって、インジェクションではなく、フォーマットについて考慮する必要があります。

また、ユーザーがデータベース資格情報でログインできるようにすることは、あまり良い考えではないと感じています。

于 2012-12-28T09:01:09.237 に答える