ファイルの種類によってディレクトリの内容を制限する方法は?

ファイルの種類によってディレクトリの内容を制限する方法は?

ファイルの種類によってディレクトリの内容を制限する方法はありますか?

たとえば、アップロードディレクトリがあり、ユーザーがここに画像のみを配置できるようにしたいとします。さらに一歩進んで、実際に画像だけを置くことができるように制限を設定できますか?

私はファイル拡張子を確認するためにCRONタスクを使用しようとしましたが、他の方法があるかどうか疑問に思いました。

ベストアンサー1

cronジョブや同様のジョブを使用して「ポスト」を強制するには、いくつかの問題があります。

  1. 競争条件。どの方法を使用しても、ディレクトリを参照して対話したくないファイルを選択して使用するプログラムまたはコードがある場合、唯一の実用的な方法は次のとおりです。防ぐこれの目的は、(1)このようにコーディングする(またはオープンソースの場合は既存のソースコードを変更する)、(2)ファイルをそのディレクトリに配置することを許可しないことです。最初。

  2. どのOSを実行しているかはわかりませんでしたが、Linuxではこれをやや効果的に使用して、ディレクトリ内のファイルの作成fanotify/名前変更を監視し、ファイルが作成または許可されていない項目に名前が変更されたことを検出できます。名前または内容が許可されます。もちろん、これは本質的に競合状態であるため、そのディレクトリにアクセスする別のコードがあり、「ユーザー」(別のプログラムまたはユーザーアカウント)がそのディレクトリにファイルを保存している場合、そのファイルが選択されるのを完全に防ぐことはできません。 (そしてコードが削除/移動する前に読むこともできます)。

私の提案は次のとおりです。

  1. 新しいグループを作成したり、ディレクトリに不要なファイルを配置したりするプログラムを実行しないように、信頼できるユーザーのみがメンバーとして構成されている既存のグループを使用してください。

  2. ディレクトリの権限を770または775などに設定し、chmodグループとユーザーの所有者をそれぞれ適切に設定しますchown。これにより、このグループ外のユーザーがディレクトリにアクセス(または書き込み)するのを防ぐことができるため、ディレクトリに正しいファイルを配置できると信頼できないプログラム/ユーザーは、ファイルシステムのランダムアクセス制御メカニズムから除外されます。これはほとんどすべてのUNIXシリーズシステム(Windowsも含まれていますが、権限システムはわずかに異なります)で機能します。このディレクトリをntfs-3gやランダムアクセス制御を無視する他のファイルシステムに保存しないように注意してください。

  3. サービスプロバイダ(Webサービス、UNIXドメインソケット、または)はファイルの内容と「アップロードされた」ファイル名を受け入れます。その後、プログラムはユーザーからファイル全体を受け取り、完全にダウンロードされるまでRAMまたは一時フォルダに保存し、ファイル名と内容を確認してエラーを引き起こす可能性のある不要なファイル形式のファイルが配置されていないことを確認します。する必要があります。ディレクトリに。ファイルが正常に表示されたら、上記のグループ制限ディレクトリに必要なファイル名にファイルの内容を書き込むだけです。

前の段落の「既存のプログラムを使用する」コンポーネントをGoogleで検索した結果、可能な解決策は1つだけでした(強力ではありません):Sambaサポートファイル拡張子ブラックリスト。ただし、ファイル拡張子のスキャンを回避するために、任意のコンテンツを含むすべてのファイルの名前を変更してファイル拡張子を含めることができることに注意してください。ファイル拡張子の確認は、ユーザーが誤って実行可能ファイルをアクティブにするのを防ぐのに役立ちます。たとえば、.txtという実行可能ファイルをアップロードすると、ユーザーのテキストエディタで無害に開き、最悪の結果になります。大きすぎます。ただし、拡張子が.exeのファイルをアップロードする場合は、Windowsをダブルクリックすると走る文書)。

しかし、ファイル拡張子のチェックだけではコンテンツファイル形式は必須形式(またはいいえの一つ歓迎されないタイプ)。これを行うには、FTPサーバーなどの「ファイルのアップロード時に」カスタムコードを呼び出すためのフックの種類が必要です(想像以上にこのように拡張できるFTPサーバーはわかりません)。その後、fileその結果に対して操作を実行します。たとえば、UNIXユーティリティを呼び出して、望ましくない型であることを確認します。file無敵ではありませんが、識別には非常に良いです。コンテンツ名前に関係なくファイル名です。


最後に考えなければならないのは、表面的な側面を見ていない場合は、不要なファイルコンテンツを禁止することがはるかに大きな問題であるということです。たとえば、PDF文書で始まるとします。これで、ファイル形式がPDF標準に違反するようにPDF文書を少し反転します。このファイルを「簡単な」PDFリーダーで開くと、ファイル形式が破損して開かれません。しかし、「スマート」PDFリーダーで開いてみると、可能損傷を自動的に検出して修復する機能!破損が深刻な場合、ファイルタイプ検出器はPDF文書ではないと誤解する可能性があります。ただし、エンドユーザーはまだファイルを開くことができます。

もっと悪いのは、欲しいなら止める特定のファイルコンテンツやファイル形式が転送されるのを防ぐために、ユーザーがそれを迂回する方法は数多くあります。 1つのアプローチは、意図的にファイルヘッダーを破損させ、ブラックリストがファイル形式を認識しないようにし、デフォルトでファイル形式を許可するようにするか、ホワイトリストがある場合はファイルを有効な形式のファイルに偽装することです。許可する入力し、コンテンツに実際のペイロードを含めます。協力する一対のユーザー(または他のユーザーをリモートで操縦する攻撃者)は、ファイルをアップロードしてダウンロードし、受信側でコンテンツを目的の形式に変更した後にデータを使用することができます。

これはステガノグラフィの領域に入り、絶滅したステゴサウルスDNAを使用してファイルが特定の種類であることを確認しようとすることができます;-)(冗談です。ステゴサウルスはステガノグラフィとは関係ありません:))ステガノグラフィでは、ファイルは表面的に完全に正当であるように見え、ホワイトリストフィルタによって許可されることもあります。ただし、攻撃者は、有効と思われる既存のファイルに任意のデータを非表示にし、他のユーザーと協力して転送する可能性があります。ファイル形式)。ステガノグラフィーは検出するのが難しい。

ただし、目標が単に「幸せなパス」ファイル形式、つまり自分が特定の形式であることを公的かつ露骨に宣言するファイルをブロックすることである場合、アップロードが許可されている準備fileディレクトリのファイルに対して同様の操作を使用できます。 FTPを介してファイルがテストに対して「チェックアウト」されると、制限されたディレクトリに移動できます。これは、暗号化/ステガノグラフィートレーニングを受けていないユーザーが不要なファイル形式をシステムにアップロードするのを防ぐのに非常に効果的です。

おすすめ記事