ホームページ  >  記事  >  バックエンド開発  >  mysql_real_escape_string() と mysql_escape_string() はアプリのセキュリティに十分ですか?

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 03:27:03818ブラウズ

Are mysql_real_escape_string() and mysql_escape_string() Sufficient for App Security?

mysql_real_escape_string() と mysql_escape_string() はアプリケーションにとって十分に安全ですか?

概要:

アプリのセキュリティを維持することは非常に重要であり、データベースのセキュリティも重要な役割を果たします。 mysql_real_escape_string() と mysql_escape_string() は SQL インジェクションから保護するために一般的に使用されますが、その有効性について懸念が生じます。

質問:

Will mysql_real_escape_string()アプリのセキュリティには mysql_escape_string() で十分ですか?

答え:

いいえ、

脆弱性mysql_real_escape_string() と mysql_escape_string() の

これらの関数は、いくつかのセキュリティの抜け穴があるため、包括的なアプリのセキュリティには不十分です:

SQL インジェクション:

  • 保護の主張にもかかわらず、これらの関数は、特にクエリで使用される PHP 変数に関して SQL インジェクションに対して脆弱なままです。
  • 例:

    $sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  

    このクエリは次のようになります。悪意のあるデータを挿入することで悪用され、不正なデータベース アクセスにつながる可能性があります。

LIKE SQL 攻撃:

  • LIKE クエリは、以下を使用して侵害される可能性があります。 「%」や「_」などの特殊文字を使用して、意図した検索条件を回避します。
  • 例:

    $sql = "SELECT url FROM GrabbedURLs WHERE " . mysql_real_escape_string($field) . " LIKE '%s%%' LIMIT %s";  

    このクエリにより、攻撃者はすべてのレコードを取得できます。

文字セットの悪用:

  • Internet Explorer は依然として文字セットの悪用に対して脆弱であり、ハッカーが任意の SQL コマンドを挿入することを可能にします。 SQL インジェクションを含む。

推奨される解決策: プリペアド ステートメント

これらの脆弱性に対処するために推奨されるセキュリティ対策は、プリペアド ステートメントを採用することです。

  • プリペアド ステートメントは、データベース サーバー固有のセキュリティ メカニズムを利用します。
  • 意図した SQL のみを実行することで、SQL インジェクションを防ぎます。
  • プリペアド ステートメントは、コードを簡素化し、脆弱性を最小限に抑えます。

例:

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.stackoverflow.com/';
$limit = 1;

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs WHERE ' . $column . '=? LIMIT ' . $limit);
$statement->execute(array($value));
while (($data = $statement->fetch())) { }

結論:

mysql_real_escape_string() および mysql_escape_string() は、特定のものに対して限定的な保護を提供しますSQL インジェクション攻撃。ただし、他のさまざまな脆弱性からアプリケーションを保護するには不十分です。推奨されるアプローチは、準備されたステートメントを使用してアプリの包括的なセキュリティを確保することです。

以上がmysql_real_escape_string() と mysql_escape_string() はアプリのセキュリティに十分ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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