ホームページ >データベース >mysql チュートリアル >`mysql_real_escape_string()` と `mysql_escape_string()` は Web アプリケーションを SQL インジェクションから保護するのに十分ですか?

`mysql_real_escape_string()` と `mysql_escape_string()` は Web アプリケーションを SQL インジェクションから保護するのに十分ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-13 03:16:14769ブラウズ

Are `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure My Web Application Against SQL Injection?

mysql_real_escape_string() と mysql_escape_string() はアプリケーションのセキュリティに十分ですか?

これらの関数はデータ保護を強化できますが、十分ではありません。 Web アプリケーションをあらゆるセキュリティから完全に保護しますリスク。

SQL インジェクション

  • Mysql_escape_string() は、特に変数データが​​クエリで使用されている場合、依然として SQL インジェクション攻撃に対して脆弱なままになる可能性があります。

SQL のような「�ta%」などのパラメーターを使用した攻撃

  • LIKE クエリを悪用すると、すべてのレコードが返されたり、完全なクレジット カード番号などの機密情報が明らかになったりする可能性があります。

Charset エクスプロイト

  • Internet Explorer は依然として次の影響を受けやすいです

LIMIT エクスプロイト

  • Mysql_real_escape_string() は、LIMIT エクスプロイト攻撃に対しては効果がありません。 LIMITを操作して任意のSQLクエリを実行するvalue.

プロアクティブな防御: プリペアド ステートメント

  • エスケープのみに依存するのではなく、プリペアド ステートメントを使用して、予期しない SQL の実行を防ぐことを検討してください。
  • 準備されたステートメントは有効なサーバー側 SQL 構文を適用し、既知と未知の両方のリスクを軽減します。

コード例

ここでは、mysql_escape_string() と PHP のプリペアド ステートメントの比較を示します。

// Escaping Method
$sql = sprintf("SELECT url FROM GrabbedURLs WHERE %s LIKE '%s%%' LIMIT %s",
               mysql_real_escape_string($argv[1]),
               mysql_real_escape_string($argv[2]),
               mysql_real_escape_string($argv[3]));

// Prepared Statement
$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));

プリペアド ステートメント、実装には若干時間がかかりますが、悪意のある SQL クエリに対する優れた保護を提供し、コードを削減します。複雑さ。

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

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