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で質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- PHP Q&Aサイトを作成していてURLの生成方法について迷っているのでアドバイスお願い致します 1 2023/08/10 16:42
- その他(ブログ) ブログの作成 2 2023/06/25 09:11
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VisualStudioでのプログラミン...
-
Tomcat FireBird(データベー...
-
ORACLEに接続できない
-
System.Net.Sockets.SocketExce...
-
VB.NET ORA-12170
-
【Win7・64・C#】マイコンUSB通...
-
●Excel VBAからSQLServerのデー...
-
ctfmon.exe。スタック ベースの...
-
IIS7.5 Excel ファイルオープ...
-
タスクバーのボタンがオレンジ...
-
web.configとは?(初心者です)
-
C#からvbsを実行したい
-
TeraTermマクロの”Link...
-
有効なwin32アプリケーションで...
-
McAfeeの使い方
-
コマンドボタンのキャプション...
-
ネットワークフォルダが開かない
-
実行プログラム名の取得
-
GridviewとDataGridviewの違い
-
信長の野望 革新について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VisualStudioでのプログラミン...
-
OracleInProcServer.XOraSessio...
-
c#のTLS1.2での通信について
-
System.Net.Sockets.SocketExce...
-
ConnectNamedPipeの接続待ち
-
データベース接続/切断の基本的...
-
Android端末から外部DB(MYSQL...
-
javascriptでSQLite接続
-
●Excel VBAからSQLServerのデー...
-
【Win7・64・C#】マイコンUSB通...
-
VB6.0のコードによるMySQLへの接続
-
VB.NET ORA-12170
-
ローカル側のC#から、リモート...
-
sqlnet.logについて
-
Cでデータベース操作
-
PerlからOracleに接続
-
Androidから外部DBサーバーへ接...
-
VB2010 Dataset内のDB接続先変更
-
DataAdapterだけじゃダメ?
-
Tomcat FireBird(データベー...
おすすめ情報