ホームページ > データベース > mysql チュートリアル > 「mysqli_real_escape_string()」は SQL インジェクション攻撃を防ぐのに十分ですか?

「mysqli_real_escape_string()」は SQL インジェクション攻撃を防ぐのに十分ですか?

Susan Sarandon
リリース: 2024-12-14 07:41:10
オリジナル
654 人が閲覧しました

Is `mysqli_real_escape_string()` Enough to Prevent SQL Injection Attacks?

MySQLi の "mysqli_real_escape_string" は SQL 攻撃に対して十分ですか?

コードは、"mysqli_real_escape_string()" を使用して SQL インジェクションから保護しようとしています。ただし、uri2x で示されているように、この対策は不十分です。

SQL インジェクションに対する脆弱性

「mysqli_real_escape_string()」は特定の文字のみをエスケープするため、クエリは SQL に対して脆弱なままになります。注射攻撃。たとえば、次のコードは依然として脆弱である可能性があります:

$email = mysqli_real_escape_string($db_con, $_POST['email']);
$query = "SELECT * FROM users WHERE email = '" . $email . "'";
ログイン後にコピー

攻撃者は、「email'@example.com」のような電子メール アドレスを入力してクエリを悪用し、エスケープされた入力の後に追加の SQL ステートメントを追加する可能性があります。

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

の代わりに「mysqli_real_escape_string()」、SQL インジェクションを防ぐ最も効果的な方法は、準備されたステートメントを使用することです。プリペアド ステートメントはクエリ文字列からデータを分離し、データの汚染を防ぎます。

$stmt = $db_con->prepare("INSERT INTO users (email, psw) VALUES (?, ?)");
$stmt->bind_param('ss', $email, $psw);
$email = mysqli_real_escape_string($db_con, $_POST['email']);
$psw = mysqli_real_escape_string($db_con, $_POST['psw']);
$stmt->execute();
ログイン後にコピー

厳密な文字のホワイトリスト

プリペアド ステートメントが実現できない状況では、厳密な文字を実装します。ホワイトリストはセキュリティを保証できます。これには、入力をフィルタリングして、許可された文字のみが含まれていることを確認する必要があります。

結論

「mysqli_real_escape_string()」だけでは、SQL インジェクションから保護するには不十分です。準備されたステートメントと厳格なホワイトリストにより、これらの攻撃に対するより強力な保護手段が提供されます。

以上が「mysqli_real_escape_string()」は SQL インジェクション攻撃を防ぐのに十分ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート