「mysqli_real_escape_string」は SQL インジェクション攻撃を効果的に軽減しますか?
広く使用されているにもかかわらず、「mysqli_real_escape_string」関数だけでは完全に保護するには不十分ですSQLインジェクションに対して
「mysqli_real_escape_string」の制限
「mysqli_real_escape_string」は、目的の SQL クエリを操作するために悪用される可能性がある特殊文字をエスケープすることを目的としています。ただし、パターン マッチングへの依存は限られた文字セットのみをカバーするため、攻撃者が別の方法で悪意のあるコードを挿入する余地が残されています。
プリペアド ステートメントの優位性
SQL インジェクションを効果的に防止するには、プリペアド ステートメントを使用することを強くお勧めします。プリペアド ステートメントは、データ (パラメーター) を実際のクエリ文字列から分離し、汚染の可能性を防ぎます。この分離により、複雑なクエリであっても SQL インジェクションの脅威が効果的に排除されます。
追加のセキュリティ対策
準備されたステートメントが実行できない場合は、厳密なホワイトリストを使用できます。入力を事前に設定された安全な値に制限するために実装されています。このアプローチにより、承認されたデータのみが SQL クエリで使用されるようになり、悪意のあるインジェクションのリスクが最小限に抑えられます。
実装例
準備されたステートメントを使用して次のコード スニペットを考えてみましょう。 SQL インジェクションに対する保護:
$query = $db->prepare("INSERT INTO `users` (`email`,`psw`) VALUES (?, ?)"); $query->execute([$email, $psw]);
この例では、データ (電子メールと psw)は、準備されたステートメントにパラメータとして渡され、潜在的な悪意のある文字が効果的に無効化されることが保証されます。
したがって、「mysqli_real_escape_string」はある程度の保護を提供しますが、準備されたステートメントや厳密なホワイトリストの使用が最も信頼性が高く、 SQL インジェクション攻撃に対する安全なソリューション。
以上が「mysqli_real_escape_string」は SQL インジェクションに対して十分な保護を提供しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。