LoginSignup
0

More than 3 years have passed since last update.

【PDO】複文禁止オプションの注意点(ATTR_EMULATE_PREPARES)

Posted at

環境

OS:CentOS 7.3
PHP:7.1.21
mariadb:10.1.22

概要

PDOで PDO::ATTR_EMULATE_PREPARESfalse にすると、
(機能のひとつとして)セミコロンでつなげたSQL(複文)を禁止できるようですが、
コメント(--) の部分は複文として検知してくれないようです。

※ 以下、query() メソッド使用。

$sql .= "select * from table1;\n";
$sql .= "select * from table2;\n";

//検知してくれる OK
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'select * from table2' at line 2

$sql .= "select * from table1;\n";
$sql .= "-- select * from table2;\n";

//検知しなかった???

$sql .= "select * from table1;\n";
$sql .= "-- select * from table2;\n";
$sql .= "select * from table3;\n";

//これは検知するけど3行目なんだ・・・
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'select * from table3' at line 3

まとめ

複文禁止といっても「有効なSQLの複文」を禁止するみたいで、
コメント行は有効なSQLでないということなのでしょう。

コメント(--) を使ったSQLインジェクションがありますが、
PDO::ATTR_EMULATE_PREPARES の設定だけでは不十分ということですね。

コメント使用の攻撃に対しては、
プリペアドステートメントを併用して防ぎましょう。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0