ホームページ >データベース >mysql チュートリアル >準備されたステートメントにはセキュリティのために「mysql_real_escape_string()」が必要ですか?

準備されたステートメントにはセキュリティのために「mysql_real_escape_string()」が必要ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 23:50:29282ブラウズ

Do Prepared Statements Need `mysql_real_escape_string()` for Security?

準備されたステートメントでの mysql_real_escape_string の使用

質問:

準備されたステートメントを使用する場合、mysql_real_escape_string() 関数を使用する必要がありますか?データベース クエリのステートメント?

コンテキスト:

提供されたコードは、mysqli ライブラリを使用したプリペアド ステートメント クエリを示しています。ただし、現在はユーザー入力をサニタイズするために mysql_real_escape_string() 関数を使用しています。

<code class="php">$consulta = $_REQUEST["term"]."%";

($sql = $db->prepare('select location from location_job where location like ?'));

$sql->bind_param('s', $consulta);
$sql->execute();</code>

答え:

いいえ、プリペアド ステートメントは SQL インジェクションに対する固有の保護を提供し、適切に使用した場合のデータ操作。これらは入力を自動的にサニタイズし、mysql_real_escape_string() を冗長にします。

改善点:

クエリはプリペアド ステートメントを正しく使用していますが、軽微な変更により効率が向上します。 bind_param() メソッドを使用する代わりに、execute() メソッドを使用してパラメータを直接渡すことができます。

<code class="php">$sql->execute([$consulta]);</code>

補足:

プリペアド ステートメントは保護しますが、 SQL インジェクションに対しては、データをページに出力する際の安全性は保証されません。潜在的なクロスサイト スクリプティング (XSS) 攻撃を防ぐには、ブラウザに出力する前に htmlspecialchars() を使用してデータを HTML エンコードすることをお勧めします。

以上が準備されたステートメントにはセキュリティのために「mysql_real_escape_string()」が必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。