No.2ベストアンサー
- 回答日時:
少し古いドキュメントですが、一読をおすすめします。
安全なSQLの呼び出し方 - 情報処理推進機構
http://www.ipa.go.jp/files/000017320.pdf
MySQLの場合はデータベースへの接続方法によっては、
DBMSへ引き渡す前に変数とクエリが結合されてしまうようです。(動的プレースホルダ)
そして残念なことに、この接続方法がデフォルトになっているようです。
そして、上記のドキュメントには、次のように記述されています。
----------------------------------------------------------------------------------
静的プレースホルダは、SQLを準備する段階でSQL文の構文が確定し、あとからSQL構文が変化することがないため、SQLインジェクションの脆弱性が生じません。
それに対して、動的プレースホルダは、バインド処理を実現するライブラリの実装に問題があると、SQL構文が変化する可能性があり、SQLインジェクションの脆弱性が生じる可能性を否定できません。
ご回答ありがとうございます
ざっと読んだところ、静的プレースホルダを利用すれば、仕組み上SQLインジェクションが発生しなことがわかりました。
どうすれば、静的プレースホルダを利用できるか、利用できないなら、もう一度「安全なSQLの呼び出し方」をよんで適切なエスケープ処理を勉強します
No.1
- 回答日時:
>>PDOのprepare()を使えば(プレースホルダを使えば?)、SQLインジェクションは必ず発生しないと言えますか?
現時点では、発生しないといえるでしょう。ただ、創意工夫して、それを可能にする方法を将来思いつく方がいるかもしれませんけどね。
>>もし、そうだとすれば、SQLインジェクション対策はかなり簡単ですよね?
実際にプログラムを作った経験があれば、「かなり簡単ですよね?」なんて言えないはずですけどね。
対策と修正にかかるお金、それにかかる時間、修正時のバグ混入への対策とテストなどを考えると、その「かなり簡単なこと」ができないサイトが多いから、現時点でも同様なサイバー攻撃を受けて、それが成功するサイトがあるのだと思います。
>>実際は他の問題が発生したりするんですかね?
もちろん、他のセキュリティホールになる部分が沢山あると思います。攻撃側は、そういうセキュリティホールの情報共有を犯罪者仲間と行い、スキルアップしつつ、情報・技術蓄積の精進を通じて、侵入の成功率をアップする努力を日々続けているのだと思っています。
>>実際にプログラムを作った経験があれば、「かなり簡単ですよね?」なんて言えないはずですけどね。
軽率な発言申し訳ございません。システムを作る段階からプレースホルダを使うようにすることを前提にしていました。そのため、すでにあるシステムに対策を施すことについていったわけではありませんでした
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIとPHPは何をするもの?
-
System.Net.Sockets.SocketExce...
-
c#のTLS1.2での通信について
-
ASP.NETでSQL-SERVERへの接続方法
-
TCP通信
-
VB.NETで、ORACLE 8に接続する...
-
Delphi でOracleのデータを表示...
-
OracleInProcServer.XOraSessio...
-
ctfmon.exe。スタック ベースの...
-
jdk17.06のインストーラーが起...
-
タスクバーのボタンがオレンジ...
-
TeraTermマクロの”Link...
-
web.configとは?(初心者です)
-
ASP AccessDBオープン出来ない
-
有効なwin32アプリケーションで...
-
パソコンのアプリケーションエラー
-
windows vistaで、最近 KACT2
-
Windowsが起動しなくなってしま...
-
Program FilesとProgram Files ...
-
●スタンバイ時に任意のアプリを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.Net.Sockets.SocketExce...
-
OracleInProcServer.XOraSessio...
-
c#のTLS1.2での通信について
-
●Excel VBAからSQLServerのデー...
-
データベース接続/切断の基本的...
-
ConnectNamedPipeの接続待ち
-
ASP.NETのパフォーマンスと接続...
-
FFFTPでファイル一覧を取得でき...
-
ASP.NETでSQL-SERVERへの接続方法
-
メールを変数の中に入れたいの...
-
PerlからOracleに接続
-
VB.NET ORA-12170
-
クライアントとサーバーの接続...
-
Android端末から外部DB(MYSQL...
-
VB6.0のコードによるMySQLへの接続
-
DB接続エラー
-
php でMS Access に接続する方法
-
SFTPについて
-
ソケット通信について
-
Delphi でOracleのデータを表示...
おすすめ情報