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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-20 00:41:12290ブラウズ

Is `mysqli_real_escape_string` Enough to Prevent SQL Injection Attacks?

「mysqli_real_escape_string」は SQL 攻撃の防止に適切ですか?

提供されたコードは、SQL インジェクションから保護するために mysqli_real_escape_string を利用しています。ただし、この関数だけでは完全な保護には不十分であることに注意することが重要です。

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

mysqli_real_escape_string を採用しているにもかかわらず、コードは SQL インジェクション攻撃の影響を受けやすいままです。 。これは、文字列の連結を使用して SQL クエリを組み立てるため、攻撃者がフォーム入力を通じて悪意のあるコードを挿入してクエリを操作できるようになるためです。

推奨される解決策: 準備されたステートメント

SQL インジェクションを防ぐ最も効果的な方法は、準備されたステートメントを使用することです。データパラメータをクエリ命令から分離し、汚染の可能性を排除します。以下に例を示します。

$stmt = $db_con->prepare("INSERT INTO `users` (`email`, `psw`) VALUES (?, ?)");
$stmt->bind_param("ss", $email, $psw);
$stmt->execute();

追加のセキュリティ対策

準備されたステートメントが実行できない場合は、次のことを検討してください。

  • ホワイトリスト検証: ユーザー入力を事前に定義された許可されたセットに制限します値。
  • タイプ キャスト: 値が意図した型に適切に変換されていることを確認し、悪意のあるコードの実行を防ぎます。
  • エミュレートされたプリペアド ステートメントを無効にする: MySQL を使用している場合は、$db_con->setAttribute(PDO::ATTR_EMULATE_PREPARES, 間違い);

これらの対策を実装することで、SQL インジェクションやその他の SQL 攻撃に対するアプリケーションのセキュリティを大幅に強化できます。

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

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