ホームページ  >  記事  >  バックエンド開発  >  PHP 言語開発におけるパス トラバーサルの脆弱性を回避するにはどうすればよいですか?

PHP 言語開発におけるパス トラバーサルの脆弱性を回避するにはどうすればよいですか?

王林
王林オリジナル
2023-06-10 14:24:201602ブラウズ

PHP 言語開発では、パス トラバーサルの脆弱性が一般的なセキュリティ問題です。攻撃者はこの脆弱性を利用してシステム内のファイルを読み取ったり、さらには改ざんしたりすることができ、システムのセキュリティを大幅に危険にさらす可能性があります。この記事では、パス トラバーサルの脆弱性を回避する方法について説明します。

1. パス トラバーサルの脆弱性とは何ですか?

パス トラバーサル (ディレクトリ トラバーサルの脆弱性とも呼ばれます) とは、攻撃者が「../」演算子またはその他の形式の相対パスを使用して、アプリケーションのルート ディレクトリの外側にある Directory に侵入し、ファイルを読み取ったり変更したりすることを意味します。アプリケーションに関連するもの。

たとえば、ユーザーがファイル パスとして「../../../../etc/passwd」を入力すると、アプリケーションはファイル パスを制限せず、指定されたパスを連結します。ユーザーをファイル システムに侵入すると、攻撃者はシステム内の機密情報を取得する可能性があります。

2. パス トラバーサルの脆弱性を回避するにはどうすればよいですか?

  1. ユーザー入力の検証

パス トラバーサルの脆弱性を回避するための最も重要な手順は、ユーザー入力を検証して、入力に有効な文字とパス識別子のみが含まれていることを確認することです。正規表現、ホワイトリストなどを使用して、ユーザー入力をフィルタリングできます。

たとえば、Apache の一般的なディレクトリ トラバーサルの脆弱性では、次のような URL が使用されます:

http://localhost/index.php?page=../../.. / ../etc/passwd

攻撃者は、この URL に悪意のあるリクエストを送信することで、システム内の機密ファイルを読み取ることができます。この攻撃を防ぐために、ユーザーの入力に文字、数字、一部の特殊記号などの特定の文字のみが含まれるように制限できます。

  1. ファイル アクセス許可を制限する

許可されたユーザーのみがファイルにアクセスできるように、アプリケーションはファイル アクセス許可を制限する必要があります。特に Web アプリケーションでは、サーバー上のファイルとディレクトリが Web ユーザーのみに読み書き可能であることを保証する必要があります。

たとえば、Linux システムでは、chroot を使用して、プロセスのファイル仮想ルート ディレクトリを制限できます。 PHP では、open_basedir を使用してスクリプト ファイルのアクセス許可を制限できます。

  1. 絶対パスの使用

絶対パスを使用すると、パス トラバーサルの脆弱性を回避できます。 PHP では、$_SERVER['DOCUMENT_ROOT'] または __DIR__ を使用して、ファイルが配置されている絶対パスを取得できます。

たとえば、次のコードはパス トラバーサルの脆弱性を回避できます:

1085c480b9391477d477b5101a39642a

  1. 相対パスの使用を避ける

相対パスを使用するパスはパス トラバーサルの脆弱性を引き起こす可能性があります。PHP では、realpath() 関数を使用してパスの絶対パスを取得し、相対パスの使用を避けることができます。

たとえば、次のコードはパス トラバーサルの脆弱性を回避できます。 :

ef99c7733752df77bb95d84540ddccd2

  1. 安全なファイル操作関数を使用する

fread、fwrite、file_get_contents などの安全でないファイル操作関数の使用は避けてください。 。これらの関数は、ユーザー入力をファイル パスとして扱い、保護されずにファイルの読み取りまたは書き込みを行います。fopen、fclose、fgets などの安全なファイル操作関数を使用する必要があります。

たとえば、次のコードパス トラバーサルの脆弱性を回避できます:

191906b7a57a952d6e8ab94567a14773

  1. PHP バージョンの更新

PHP バージョンが 5.3.4 より低い場合は、すぐに最新バージョンに更新することをお勧めします。PHP 5.3.4 では、パス トラバーサルの脆弱性を回避するために、新しいチェック関数 realpath_cache_get が導入されています。漏洩

  1. 最後に、システム内の情報漏洩を回避する必要があります。情報漏洩は次の方法で減らすことができます:

エラー報告を無効にする: エラー報告は次の方法で無効にできます。 error_reporting 関数。

    個別のログ: PHP エラーを公開エラー出力ではなく監査ログに記録する必要があります。
  • ディレクトリのクリーンアップ: 不要なファイルとディレクトリを削除し、ディレクトリへのアクセスを制限します。
  • 要約:
パス トラバーサルの脆弱性は深刻なセキュリティ問題です。時間内に対処しないと、システムに取り返しのつかない損失が生じます。PHP 開発では、上記の原則を守る必要があります。これにより、パス トラバーサルの脆弱性が回避されます。

以上がPHP 言語開発におけるパス トラバーサルの脆弱性を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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