php の PDO を使用する際、PDO::ATTR_EMULATE_PREPARES => false
のオプションをつけることが推奨されている記事を(書籍/web 問わず)多く見かけます。
エミュレーションを off にする推奨理由は、概ね以下の理由でした。
・charset の不適切な取り扱い対策(SET NAMES
とセットで語られる)
・複文対策
php 7 系では、上記に対しては対策が完了しており、現行バージョンでは、PDO::ATTR_EMULATE_PREPARES
のオプションはtrue
で良いのではないかと考えます。
プリペアドステートメントの本来の目的は、バインド機構によるパフォーマンス改善だと思いますが、セキュリティ対策としてバインド機構を用いる場合、エミュレーションを off にすることは、多くの場合、パフォーマンスを劣化させます。
database driver レベルの問題がある場合は、安全性が損なわれることがありそうですが、ざっと検索した範囲では問題は無いように思います。
現在も、PDO::ATTR_EMULATE_PREPARES
をfalse
にすることがセキュリティ的に推奨されるのでしょうか?
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー