ホームページ > バックエンド開発 > PHPチュートリアル > mysql_real_escape_string() と mysql_escape_string() は MySQL アプリケーションを保護するのに十分ですか?

mysql_real_escape_string() と mysql_escape_string() は MySQL アプリケーションを保護するのに十分ですか?

Mary-Kate Olsen
リリース: 2024-11-01 03:03:28
オリジナル
1017 人が閲覧しました

Are mysql_real_escape_string() and mysql_escape_string() Enough to Secure MySQL Applications?

MySQL セキュリティ: mysql_real_escape_string() と mysql_escape_string() は適切ですか?

アプリケーション セキュリティに対する mysql_real_escape_string() と mysql_escape_string() の有効性いくつかの議論を引き起こしました。これらの関数は既知の SQL インジェクション ベクトルを防止しますが、その制限により、より高度な攻撃に対して脆弱になる可能性があります。

SQL インジェクションの脆弱性

mysql_real_escape_string() を使用しているにもかかわらず、 PHP 変数がクエリに統合されているシナリオでは、依然として SQL インジェクションの影響を受けやすくなります。たとえば、次のコードを考えてみましょう:

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);</code>
ログイン後にコピー

高度なハッカーは、次の入力でこのクエリを悪用する可能性があります:

<code class="php">$field = "1=1"
$value = "1"</code>
ログイン後にコピー

これにより、意図されたロジックがバイパスされ、代わりに (潜在的に) すべてのレコードが返されます。

LIKE 攻撃

mysql_real_escape_string() は、次のような LIKE 攻撃を防ぐのには効果がありません。

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " LIKE " . mysql_real_escape_string($value);</code>
ログイン後にコピー

A悪意のあるユーザーが $value を % に設定してすべてのレコードを取得すると、機密データが公開される可能性があります。

文字セットの悪用

Internet Explorer は、2011 年現在でも、文字セットの悪用に対して脆弱なままです。この脆弱性により、SQL インジェクションと同様に、攻撃者がデータベースを制御できるようになる可能性があります。

準備されたステートメント: プロアクティブなアプローチ

mysql_real_escape_string() と mysql_escape_string() の両方が脆弱です。それらは事後的な防御メカニズムです。一方、準備されたステートメントは、プロアクティブなソリューションを提供します。プリペアド ステートメントは、有効でプログラムされた SQL のみを実行するため、基礎となるデータベースの脆弱性に関係なく、予期しない SQL が実行されるリスクを大幅に軽減します。

プリペアド ステートメントを使用した例を次に示します。

<code class="php">$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));</code>
ログイン後にコピー

準備されたステートメントは安全であり、mysql_real_escape_string() を使用する場合よりも冗長ではありません。既知および未知の脅威から身を守るために、データベース サーバーの保護手段に依存しています。

以上がmysql_real_escape_string() と mysql_escape_string() は MySQL アプリケーションを保護するのに十分ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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