ftp でアップロードされるファイルを制限しようと思っています。オフィス系は許可しますが、サーバ内のクラッキング使われるようなファイルのアップは制限しようと思っています。そういった場合に一般的にどういったファイルのアップロードを禁止するのでしょうか? .php .cgi がぱっと思いつきますが、ぱっと思いつくレベルで他の拡張子はあるでしょうか? 大雑把な質問なのですが、よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2012/02/20 13:08:31
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

ポイント100pt

すぐに思いつくものでは以下のような拡張子があります。

  1. .(ドット)ではじまるファイル
  2. sh
  3. com, exe, bat

ただし、サーバがLinuxでしたらファイルのパーミッションが問題ですので、むしろパーミッションを変更されないように設定することが大切です。

id:kaiketsu

おお、sh もありますね。

2012/02/20 13:08:25
  • id:JULY
    あと、.pl(Perl)、.rb(ruby)、.py(python) とか...。

    ただ、oil999 さんも書いてますが、UNIX 系 OS ではパーミッションの方が、と思います。

    そもそも、UNIX 系 OS では、OS 自体にとっては、拡張子は意味を持っていません。あくまでもファイル名の一部です。/usr/bin の下で、

    file *

    とやると、普通のコマンドだと思っていたものが、実はシェルスクリプト、という物が見つかると思います。

    .cgi や .php という拡張子も、OS にとっては特別な意味がなく、Web サーバが認識するだけです。.cgi というと Perl のスクリプトのイメージがありますが、別に Perl で書かれたものである必要はなく、シェルスクリプトで書こうが、ruby で書こうが、バイナリファイルのネイティブプログラムだろうが、一向に構いません。*.cgi というファイル名だったら、Web サーバが「このファイルが CGI のインタフェースに対応したプログラムファイルだろう」と判断して、必要な環境変数を設定して指定されたファイルの実行を試みるだけです。

    で、OS がプログラムを起動するときには、

    ・ファイルのパーミッションで実行権が設定されている。
    ・ファイルの先頭数バイトを読み込み、ファイル種別を判断する。
    ・もし、ELF 形式のバイナリファイルだと判断できれば、そのファイルを直接実行する。
    ・もし、「#!」で始まっている場合、その後ろに書かれているパス名のプログラムに対して、ファイル名を引数として渡して実行する。

    といった流れになります。

    # .php の場合は、通常は、Web サーバ側が組み込まれている php のモジュールへ渡す形になります。

    なので、拡張子で絞るのは「気休め」です。もちろん、Web サーバからの実行だけを考えれば、Web サーバの設定として、外部プログラムの実行として設定されている拡張子に対して、何らかの絞り込みをすることは考えられますが、OS として、実行可能なファイルが置けなくなっている訳ではない、という点に気をつけてください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません