🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

7回答

1458閲覧

SQLインジェクション対策の必要性について

nekosuke123

総合スコア6

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

1グッド

1クリップ

投稿2020/12/03 08:54

編集2020/12/03 08:54

質問

現在クライアントシステムを作っているのですが、
SQLインジェクション対策を付けるべきか、付けないべきか迷っています。

クライアントシステムなのでシステムが入っているクライアントしかDBに接続できないし、
不特定多数の人がDBに触ることにもならないので、いらないのかなと思っています。

それとも、システムを使う特定の人たちにも疑いの目を向けて対策しておくべきなのでしょうか。
社内システムなどを作るときなどはどのようにするのか教えていただけると幸いです。

wakaranchin👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/03 23:30

クライアントシステムって何でしょうか?
guest

回答7

0

入力されるデータがどんな状態であってもエスケープの必要の無いデータであることが保証されているのであれば必要無いかと思います。

それとも、システムを使う特定の人たちにも疑いの目を向けて対策しておくべきなのでしょうか。
社内システムなどを作るときなどはどのようにするのか教えていただけると幸いです。

疑うべきは「特定の人たち」では無く、入力され得るデータの範囲です。

  • 通常の入力ではエスケープするべき文字列が入る可能性が無いのか
  • 入力ミスや悪意によって想定しない文字列が入る可能性は無いのか
  • 標的型攻撃等によって想定しない文字列が入る可能性は無いのか
  • 仮に発生したとして、復旧やデータ漏洩に対して何とか問題を解決できるのか

あたりを完全に精査して開発の要件から外せるのであれば、前述の通り必要ありません。

例えば、特定の端末の特定のインターフェイス(例えば、ATMの様に指定桁数の数字しか入力できないタッチパネル等)からしか入力できないシステムであれば、SQLインジェクション対策をしなくても問題にならない可能性が高いと思います。(私ならそれでも入れておきますが)

が、そんなことを精査する&将来に渡って保証し続けるくらいなら一律で静的プレースホルダーによるSQLインジェクション対策を行っておく方がよほど楽です。

投稿2020/12/03 11:06

編集2020/12/03 11:08
tanat

総合スコア18727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQLインジェクション対策を付けるべきか、付けないべきか迷っています。

そんなことに迷ってないで、当たり前のこととして対策すべきです。

【追記】

どのようなアプリか書いてないので分かりませんが、例えばクエリをパラメータ化するという当たり前にやるべきことをやっておくだけでも、SQL インジェクションの防止になります。詳しくは以下の記事を見てください。

パラメータ化クエリ
http://surferonwww.info/BlogEngine/post/2012/02/02/Parameterized-query.aspx

ただし、以下の記事に書いてありますが「高いスキルを持つ決然たる攻撃者は、パラメータ化されたデータであっても操作できるのです」というのはその通りで、そこに書いてある「すべての入力の検証」なども考えるべきと思います。

SQL インジェクション
https://docs.microsoft.com/ja-jp/previous-versions/sql/sql-server-2008/ms161953(v=sql.100)

投稿2020/12/03 09:02

編集2020/12/03 11:19
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQLインジェクション 判例

でググるといくつも見つかりますが、ソフトウェア開発会社がSQLインジェクションの対策を怠って被害を受けた時は場合は賠償責任を負います。自社内のシステム部門が開発した場合でも社内のバッシングは避けられないでしょう。

食中毒を起こしたレストラン同様、SQLインジェクションの対策を怠ったら社会的信用は致命的になると思った方が良いです。

投稿2020/12/03 10:47

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

現在クライアントシステムを作っているのですが、

SQLインジェクション対策を付けるべきか、付けないべきか迷っています。

大は小を兼ねる。
付けられるなら付けるに越したことはないです。

投稿2020/12/03 09:33

kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

自分はつけておきますね。といってもガチガチにはしないですが
クライアントが100%信用できるとは限りませんし、ちょっとかじった人なら
SQLインジェクションを試してしまう可能性もゼロではありません。そのとき、データベースに
論理破壊が起きたら、責任をかぶるのは結局自分です。

あと、自社でそのプログラムを流用したりする場合、その部品はクライアントシステムでしか品質を保障できなくなりますので。

投稿2020/12/03 09:02

FKM

総合スコア3647

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

それとも、システムを使う特定の人たちにも疑いの目を向けて対策しておくべきなのでしょうか。

世の中を騒がせているセキュリティ事故の要因の多くはヒューマンエラーです。

人が操作する限り絶対はありません。
意図せずやってしまうことだってあります。

事故を起こしたい人のほうが少ないわけで、
そんな中でも事故が起こるのは一瞬の不注意。

セキュリティ対策の本質は「ユーザー操作は信用しない」ことです。

プログラムは書いたとおりにしか動きませんから、
送られてきた情報は組まれているプログラムの通り処理されます。
何も対策してなければ、どんなに汚染された情報が送られてきても何もしません。

「特定の人たち」と言っても、同じ人が永遠に操作するわけではありません。
となると、半永久的に入れ替わり続け多くの人が操作することになります。
その中で絶対のミスもない、絶対に悪意がない ありえるでしょうか?
当然、システムを提供する、メンテナンスをする方もずっと同じ人ではないです。

対策をしなくて大損することはあるでしょうけど(時に双方致命的になる)
対策をしておいて損することは基本的にないです。

投稿2020/12/03 14:22

編集2020/12/03 14:24
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

対策と言ってもエスケープする程度で十分かと思いますので
工数がそこまでかからないなら対策したほうがいいんじゃないでしょうか??

投稿2020/12/03 09:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問