質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

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

Q&A

解決済

4回答

285閲覧

SQLインジェクションはパラメータをクオートすれば安全ですか

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

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

0グッド

2クリップ

投稿2018/03/07 09:51

タイトルのとおりです。
クオートさえしてれば絶対に安全ですか?

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/03/07 12:11

SQL インジェクションって、クエリをビルドする際に起きることが多いので、対象となる言語(とかビルドする仕組み)を記述した方が的確な回答が付くかと
guest

回答4

0

ベストアンサー

「SQLインジェクションはパラメータをクオートすれば安全ですか」という質問に端的に答えるなら、答えはNoです。
例えば、以下の記事をお読みください。

JavaとMySQLの組み合わせでUnicodeのU+00A5を用いたSQLインジェクションの可能性

投稿2018/03/08 11:25

ockeghem

総合スコア11701

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

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

0

IPAが公開しているSQLインジェクション対策を一読しましょう。
検討するべき事柄が他にもあります。(クォートだけじゃ足りなすぎる。)
https://www.ipa.go.jp/files/000024396.pdf

投稿2018/03/07 09:59

編集2018/03/07 10:25
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/03/07 10:31

回答ありがとうございます。 その資料にはエスケープすることしか書いてないようですけど
退会済みユーザー

退会済みユーザー

2018/03/07 11:21

SQL文の実行に直結する部分においてはそのように思い込まれるのも仕方ないですが、SQL実行するユーザー権限の扱いを適切に対応することなど、補足的な情報のページもあります。 エスケープ処理をする方法についても、処理系が用意するバインド機構の活用や、ユーザーが文字列置換関数を活用する方法など複数のケースに触れられています。(3ページにも渡って。) 質問者さんが言う「クオートさえしてれば」というのを、私は「ユーザーが文字列置換関数を活用する」と解釈したので、回答では「足りなすぎる」としました。大げさに思われたかもしれません。
guest

0

個別で対応するより、プレースホルダ(prepare)で処理すれば良いと思います
ただしSQLに渡す前にある程度のサニタイズはしたほうがよいでしょう

投稿2018/03/08 01:25

yambejp

総合スコア114843

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

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

退会済みユーザー

退会済みユーザー

2018/03/08 10:27

そのプレースホルダでエスケープさえすれば安全なのかが知りたくて質問しました
yambejp

2018/03/08 10:40

パラメータをクオートすることとプレースホルダは必ずしも同義ではありません。 逆に適切なプレースホルダで対応すれば原則安全です。 (SQL文の構築の仕方自体が脆弱であれば絶対に安全とはいえません)
guest

0

甘いです。where句に or 0=0 などの条件をクォーテーションの中に埋め込まれたテーブルが全件持って行かれます。
SQLインジェクション対策について
SQLインジェクション対策を怠って訴訟を起こされて開発側が敗訴した判例もありますからご注意を。

投稿2018/03/07 10:10

Orlofsky

総合スコア16415

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

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

退会済みユーザー

退会済みユーザー

2018/03/08 10:26

その条件式もエスケープされると思うのですが、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問