プリペアド ステートメントを回避する場合
SQL インジェクション攻撃を防ぐための一般的な方法は、プリペアド ステートメントを使用することです。ただし、プリペアド ステートメントが最適なオプションではない場合もあります。
この特定のケースでは、開発者は SELECT foo,bar FROM baz WHERE quux などの基本的なクエリを使用する Web アプリケーションを再設計しています。 = ? ORDER BY bar LIMIT 1. これらのクエリは、ページ ヒットごとに 1 回だけ実行されます。さらに、開発者はホスト環境におり、追加のサーバー負荷を避けたいと考えています。
これらの考慮事項を考慮すると、開発者はプリペアド ステートメントの使用が必要かどうか疑問に思います。
回答
プリペアド ステートメントを回避する必要があるかどうかを判断するには、プリペアド ステートメントには次の 2 つの主な利点があることを考慮することが重要です。
この特定のシナリオでは、各クエリはページ ヒットごとに 1 回だけ実行されるため、開発者はクエリの再利用を気にしません。したがって、クエリの再利用によるパフォーマンス上の利点はごくわずかです。
ただし、インジェクション防止の側面には懸念が残ります。これに対処するために、開発者はエミュレートされた準備済みステートメントの使用を検討できます。これらのステートメントは、PHP 関数を使用して引用符とパラメーターの置換を処理し、複数のデータベースのラウンドトリップのオーバーヘッドなしで SQL インジェクションに対する保護を提供します。
推奨事項
情報に基づくただし、準備済みステートメントの使用を避け、代わりにエミュレートされた準備済みステートメントを選択することをお勧めします。このアプローチにより、SQL インジェクションに対する保護が提供され、実際のプリペアド ステートメントで発生する追加のデータベース ラウンドトリップが回避されます。
以上がホスト環境での単一実行クエリではプリペアド ステートメントを回避する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。