ホームページ > バックエンド開発 > PHPチュートリアル > PHP セキュリティ - ファイル名の操作

PHP セキュリティ - ファイル名の操作

黄舟
リリース: 2023-03-05 21:24:01
オリジナル
1200 人が閲覧しました



ファイル名操作

動的インクルージョンは多くの状況で使用され、ディレクトリ名またはファイル名の一部が変数に保存されます。たとえば、動的ページの一部をキャッシュして、データベース サーバーの負荷を軽減できます。

りー


この脆弱性をより明確にするために、例では $_GET が使用されています。この脆弱性は、汚染されたデータを使用する場合にも存在します。 $_GET['username'] の使用は、問題がより明確にわかる極端な例です。

上記のフローには利点もありますが、攻撃者がページをキャッシュすることを自由に選択する機会も提供します。たとえば、ユーザーは URL のユーザー名の値を編集することで、他のユーザーのキャッシュ ファイルを簡単に表示できます。実際、攻撃者は、ユーザー名の値を対応するファイル名 (拡張子なし) に変更するだけで、/cache ディレクトリ内の .html 拡張子を持つすべてのファイルを表示できます。

http://www.php.cn/

このプログラムは攻撃者が操作できるディレクトリとファイル名を制限していますが、ファイル名の変更が唯一の方法というわけではありません。攻撃者は、ファイル システム全体に創造的にアクセスし、他のディレクトリにある .html ファイルを表示して機密情報を発見できます。これは、文字列内の親ディレクトリを使用してディレクトリ スパンを実行できるためです。 http://www.php.cn/

上記URLの実行結果は以下の通りです。 現時点では,... は、ルート ディレクトリである /cache の親ディレクトリを意味します。したがって、上記の例は次と同等です:

 <?php
 
  include "/cache/{$_GET[&#39;username&#39;]}.html";
 
  ?>
ログイン後にコピー


すべてのファイルはファイル システムのルート ディレクトリにあるため、このプロセスにより、攻撃者はサーバー上のすべての .html ファイルにアクセスできます。

一部のプラットフォームでは、攻撃者は NULL を使用して文字列を終了することもできます。例:

http://www.php.cn/

これにより、.html ファイル拡張子の制限が回避されます。

もちろん、攻撃者の悪意のある攻撃方法をすべて盲目的に推測することは不可能です。ファイルにどれだけ多くの制御を追加しても、リスクを排除することはできません。動的にインクルードする場合は、汚染されたデータを決して使用しないことが重要です。攻撃手段は静的ではありませんが、脆弱性は変わりません。この脆弱性は、データをフィルタリングするだけで修正できます (第 1 章を参照):

 <?php
 
  include "/cache/../admin/users.html";
 
  ?>
ログイン後にコピー

もう 1 つの効果的な方法は、パラメータにファイル名部分のみが含まれ、パス情報が含まれていないことを確認することです。 .basename( を使用する) )データをフィルタリングするには:

<?php
 
  include "/admin/users.html";
 
  ?>
ログイン後にコピー

パス情報を許可しているが、検出前に単純化したい場合は、RealPath()関数を使用できます:


  <?php
 
  $clean = array();
 
  /* $_GET[&#39;filename&#39;] is filtered and stored in
$clean[&#39;filename&#39;]. */
 
  include "/path/to/{$clean[&#39;filename&#39;]}";
 
  ?>
ログイン後にコピー


上記のプログラムで取得した結果 ($filename) は、/path/to ディレクトリにあるかどうかを確認するために使用できます。

りー

検出に失敗した場合は、後の調査のために攻撃ログにリクエストを記録する必要があります。他のセキュリティ対策が失敗する理由を特定する必要があるため、このプロセスを多層防御対策として使用する場合、これは特に重要です。

上記は、PHP セキュリティ ファイル名操作の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


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