"Shade検索"Wiki

CGI/マルチアップローダ

お知らせ
ver.1.974までのスクリプトにセキュリティの上の問題があることがわかったので、
必ず対策を施したver.1.975以降にバージョンアップしてください。

特長

  • ファイルのアップロードダウンロードができるCGIです。登録されているユーザーのみアクセス可能で、ユーザー名、パスワードを入力してログインします。
  • ユーザー登録は管理者が行いますが、ユーザーが自分で登録することもできます。
  • 複数のファイルを一度にアップロードすることができます。
  • ユーザーはファイルを受け渡ししたい相手に対してメールを送信し、アップロードされたファイルのダウンロードURLを伝えたり、相手にファイルをアップロードしてもらうことができます。
  • アップロードされたファイルは指定した日数、あるいは指定したダウンロード回数を超えると自動的に削除されます。
  • サンプル ユーザー名:guest パスワード:guest
    guestアカウントは誰でもログインできるので、ファイルのアップロードやゲストへのメール送信などをテストするなら、
    「新規登録する」から実際にアカウントを作成してみた方がいいかもしれません。

更新履歴

ver.1.977 2014.02.12
パスワードの暗号化にDigest::MD5モジュールを使用できるように変更。
ver.1.976 2013.04.17
管理者が作成したユーザーアカウントで、スクリプトの設定の最大ダウンロード回数が反映されていなかったのを修正。
ver.1.975 2013.04.16
セキュリティ上の問題を修正。
ver.1.974 2013.04.12
ディレクトリ名に使用できない文字として"#"、"%"を追加。そのほかの記号でディレクトリ名に使用すると削除や移動ができなくなる場合があるのを修正。(!'~=()[]-^など)
ver.1.973 2013.04.10
サーバーのsendmailコマンドの-fオプションが無効だと、メールの送信元がサーバーのメールアドレスになってしまう問題に対処。
ゲストへの送信メールの送信元にユーザー名を追加。ユーザーからゲストへのダウンロード先通知メールで、一度に複数のメールアドレスに送信できるように修正。
ver.1.972 2013.03.28
ゲストだと、ユーザーの最大容量を超えてファイルがアップロードできるバグを修正。プロシージャ整理。perl5.12以降でjcode.plのエラーが出るのを修正。
ver.1.971 2013/03/22
ログイン情報漏洩防止のため、ログイン時のみパスワード認証を行い、ログイン後の制限ページ内でのアクションは、一時パスワードファイルで認証する方式に変更。
ユーザー設定画面のヘルプファイルが抜けていたのを修正。
ver.1.97 2013/03/18
期間制限なしのゲストを廃止。CGI操作をすべてフォームで行うのをデフォルト設定にする。メールで送信するログインURL、ダウンロードURLからパスワードを削除。
ver.1.961 2012/12/13
管理者パスワードで登録ユーザーにログインできるように変更。管理者設定のユーザー管理画面から登録ユーザーIDと管理者パスワードでログインできるように修正。
ver.1.96 2012/12/05
管理者IDを使用した場合のみ、管理者モードでログインするように変更。
ver.1.952 2012/08/27
ユーザー設定でファイルダウンロードのメール通知を無効にしていても通知メールが送信されてしまうバグを修正。
ver.1.951 2012/08/24
ゲスト以外がファイルをダウンロードしても、ダウンロード通知メールが送信されてしまうバグを修正。
管理者で設定した送信メールの敬称が有効になっていなかったのを修正。
ユーザーモードで、ログイン直後やユーザー設定変更直後にゲストアイコンが表示されなかったのを修正。
ver.1.95 2012/08/17
ダウンロード先のメールを受信したゲストがファイルをダウンロードしたら、ユーザーにメールで知らせるオプションを追加しました。
管理者設定で$send_dlmail = 1 にして、なおかつユーザーのメールアドレスを登録すると、ユーザー設定画面で「ファイルがダウンロードされたらメールで知らせる」をチェックできるようになります。
ver.1.943 2012/08/15
メール受信者への敬称を管理者設定−スクリプトの設定で変更できるようにしました。
メール送信の際、ファイル直接ダウンロードURLを表示しないよう管理者設定−スクリプト設定で変更できるようにしました。
ver.1.942 2012/06/27
アップロードしたファイルの数が多い場合、まとめてチェックできるように、メール送信フォームに「すべてチェック」ボタンを追加しました。
ver.1.941 2012/05/02
ログインフォームにリンク元など、戻り先のリンクを表示できるようにしました。
ver.1.94 2012/04/13
ボタンのみでCGIの操作が行えるオプションを追加。
ver.1.931 2011/10/18
作成済みゲストアカウントアイコンでポップアップされるコメントを修正しました。
ver.1.93 2011/08/17
登録ユーザーのディレクトリ画面で、有効期限を過ぎたアカウントが残っているよう表示されるのを修正しました。
ver.1.92 2011/08/01
ゲストへのメール送信フォームに表示されるURLの有効期限の日時が不正だったのを修正しました。
実際に送信されるメールに表示される日時は問題ありませんでした。
ver.1.91 2011/07/29
サブディレクトリに&が含まれていると、移動も削除もできなくなってしまうので、ディレクトリ名に&は使用できないようにしました。
ver.1.9 2011/07/28
大幅な改修を行いました。これまで、ゲストアカウントはユーザーと同じディレクトリにアクセスできて、アクセスできる期間にも制限はありませんでしたが、
セキュリティ管理しやすさを考慮して、アクセスできる期間と、アクセスできるディレクトリを制限することにしました。

従来のゲストモード(無期限でユーザーと同様にすべてのディレクトリにアクセスできる)も今回は残していますが、将来的には廃止する方向です。
アクセス可能期間、アクセスディレクトリを制限するアカウントをゲストという名前にするなら、従来のゲストを別の名前にしなければなりませんが、
いい名前が思いつかないので、限定なしゲストとしています。

細かいところですが、ゲストがアクセスしたときに、専用ディレクトリが○○さん専用となっているのもおかしいので、ユーザー名の敬称を省略しました。

バグ情報


ver.1.78までのマルチアップローダにバグがありました。
.htaccessを使用しない設定にしている場合、(my $use_htaccess = 0;)ファイルのダウンロード照合用のパスワードファイルが保存されないため、
アップロードされたファイルがダウンロードできないという可能性があります。
必ずver.1.8に更新してください。

復旧方法

  • すでに複数のユーザーが登録されている場合は、お手数ですが以下の方法で復旧してください。
  • multiupload_1.8.zipを解凍した内容をアップロードして、multiupload.cgiにアクセスすると、
    パスワード保存ディレクトリが存在しなかった場合、自動的に作成されます。
  • この段階では、まだ生パスワードが保存される状態になっただけなので、改めてパスワードを保存する必要があります。
    そのためには管理者モードでログインし、ユーザー管理ページのユーザー一覧から、管理者が登録したユーザー(背景が白で、専用ディレクトリが./upload/root/以下) の編集ボタンを押し、
    パスワードを入力して「以下の登録を修正」ボタンを押してください。
    お手数ですが、管理者が登録したユーザーすべてについて、この作業をお願いします。
  • ユーザー自身が登録したユーザー(背景が着色され、専用ディレクトリが./upload/usr_root/以下) の場合、
    管理者側ではパスワードを把握していないはずなので、ユーザー自身に処理してもらう必要があります。
    ver.1.8ではファイルのダウンロードの際にパスワードエラーが出たら、ユーザー設定の上書きを促すメッセージを出すようにしました。

    なぜ、暗号化しないパスワードも保存しているのかについては、アップローダ ゲストモードのパスワードをご覧ください。

特徴

  • 複数のファイルを同時にアップロードできます。(とはいっても、アップロードするファイルの指定は1個ずつですが・・・)
  • 登録ユーザーのみ使用できます。ユーザーの登録は管理者が行うほか、CGIにアクセスしたユーザー自身が登録することができます。
  • ユーザーごとにアクセスできるディレクトリ最大容量可能な操作(作成、削除、パーミッションの変更、CGIファイルのアップロード)が設定できます。
  • 登録されたユーザーは、専用ディレクトリ内にさらにサブディレクトリを作成することができます。ファイルはどのディレクトリにもアップロード、移動が可能です。
  • 登録ユーザーは、ファイルを受け渡ししたい相手に、ファイルのアップロード、ダウンロードのみ行えるゲストモードのURLをメールで送信することができます。
  • ユーザーのアクセスログを保存、閲覧することができます。
  • .htaccessの利用できるサーバーでは、ユーザー設定時に.htaccessファイルを作成してアクセス制御することができます。*1
  • 長期予定表など、ファイルアップロード機能のあるCGIはこれまでcgi-lib.plを利用していましたが、アップロードできるファイルサイズが小さいという制限がありました。
    cgi.pmモジュールを使えば、大きなファイルでもアップロードできるらしいので、cgi.pmを使っています。
    CGIを設置するサーバーにcgi.pmがインストールされているというのが設置の条件ですが、インストールされている場合が多いようです。
    cgi.pm を使うとファイルのアップロード以外にも、いろいろできるようなのですが、使用法がよくわかっていないので、今回はフォームデータの受け取りぐらいしか使っていません。

ユーザー


管理者が登録する場合と、ユーザー自身が登録した場合で、違う使い方を想定しています。

このマルチアップローダでは、ユーザーは専用ディレクトリの配下のすべてのサブディレクトリにアクセスできるようにしています。
たとえば、以下のようなディレクトリ構成になっていたとしたら

root /
   |
   +--- user1 / (ユーザー1ディレクトリ)
   |      |
   |      +--- user3 / (ユーザー3ディレクトリ)
   |      | 
   |      +--- user4 / (ユーザー4ディレクトリ)
   |      |
   +--- user2 / (ユーザー2ディレクトリ)
   |

ユーザー1は、ユーザー3やユーザー4のディレクトリにもアクセスできるということになります。
このように、適切にディレクトリを構成することによって、アクセスレベルをコントロールすることができるというのが管理者登録ユーザーの特徴です。

これに対して、ユーザー登録の場合、専用ディレクトリは、登録したユーザー専用になります。特別に管理者が指定しない限り、他のユーザーが上位ユーザーになるということはありません。
ユーザー自身が指定した相手のみとファイルのやりとりを行いたい場合は、ユーザー登録ユーザー (ほかにいい方ないかな・・・) が向いています。

ユーザーは専用ディレクトリ内で、サブディレクトリの作成、サブディレクトリ間の移動、ファイルのアップロードができます。
また、アップロードしたファイルのディレクトリ内移動、削除ができます。
さらに、ユーザーが登録した場合は、ユーザー名、パスワード、メールアドレスの変更、登録の削除ができます。

アップロードしたファイルを誰かにダウンロードしてもらったり、またはダウンロードするために専用ディレクトリにファイルをアップロードしてもらうには、相手にゲストモードのURLを通知します。
ゲストモードは、ファイルのアップロード、ダウンロードだけに操作が限定されています。
このURLの通知はブラウザ上から、フォームメールで行うことができます。ファイルをダウンロードしてもらう場合は、ファイルを直接ダウンロードするURLを知らせることもできます。

ベーシック認証


ファイルのダウンロードでベーシック認証する必要がなくなったので、説明は省略します。
生成の仕組みについては、マルチアップローダのベーシック認証 にまとめておきます。

ゲストモード


ゲストモードのパスワードと、ファイルのダウンロードについてのメモ

アップローダ ゲストモードのパスワード

バージョン1.3以前からバージョンアップする場合


バージョン1.3以前からバージョンアップする場合は以下のページを見ておいてください。

マルチアップローダのディレクトリ

設定やディレクトリを残したままバージョンアップするには


multiupload.cgi自身に設定を保存するようになっているので、新しいバージョンのmultiupload.cgiファイルで上書きすると、以前の設定が消えてしまいます。
このため、ver.1.38からそれ以降のバージョンにアップする場合は、解凍してできたファイルをすべて上書きアップロードしても、以前の設定が復元されるようにしています。

それ以前のバージョンからアップする場合、手動で設定値を新しいmultiupload.cgiの該当部分にコピーしてください。
新しいバージョンで設定項目が増えている場合もあるので、注意が必要です。
特に重要なのは、$passdirです。$passdirの値が変わると、以前のディレクトリが無効になり、その中に保存されているパスワードを認識できなくなりますので、必ず値を引き継いでください。

更新履歴

ver.1.85 2011/07.21
最大ダウンロード回数の設定を追加し、その回数ダウンロードしたらファイルを削除するようにしました。
ver.1.84 2011/06/21
ゲストモードでもディレクトリ間の移動ができるようにしました。移動しようと思えば、URL直打ちで簡単に移動出来てしまうのが気になっていましたが、*2
指定したディレクトリ以外はアクセスできないようにちゃんと制限するには、けっこう大きな改修が必要になるようなので、いっそのこと最初から移動出来ることにしました。
初期ディレクトリはこれまで同様、ゲストあてのメールフォームを送信したディレクトリということになります。
やはり、ゲストはメールフォームで指定したディレクトリにだけアクセスさせるようにしたいという要望があるなら、検討したいとは思っていますが。
ver.1.83 2011/06/13
ファイルのアップロード処理を修正して、サイズオーバーの時は早めにエラーを出すようにしました。
(とはいっても、やはりサーバーにデータを送ってからの判断になるので、結構時間はかかります・・・。 JavaScriptなどを使って、クライアント側でファイルサイズを計測するようにすれば、もっと早く判断できるのでしょうが。)
ファイルのアップロードに時間がかかるとき、同じ画面でずーっと待っているのも芸がないので、別ウインドウで処理待ち画面を出すようにしました。
ver.1.82 2011/6/8
ファイルのダウンロード処理を修正しました。
ver.1.81 2011/5/31
.htaccessを使用する設定の場合は、multiuploadディレクトリにも.htaccessファイルを作成するようにしました。
管理者設定のユーザー管理画面で、パスワード関係の問題があるユーザー(生パスワードが保存されていない、.htpasswd.htaccessファイルが存在しないなど)は
アラームを表示して、対応を促すようにしました。
ver.1.8 2011年5月29日
パスワード保存ディレクトリが作成されていない場合、自動的にディレクトリを作成する処理を追加。
ユーザー設定の変更が可能なユーザーに対して、ファイルのダウンロードに失敗する場合はユーザー設定の上書きを促すメッセージを出すようにした。
ver.1.79 2011年5月27日
.htaccessによるアクセス制限を行わない設定だと、生パスワードが保存されず、アップロードしたファイルがダウンロードできないバグを修正
ver.1.78 2011年5月18日
管理者用ヘルプを追加。
ver.1.77 2011年5月11日
Jcode.pmが使用できないのに文字コードライブラリでJcode.pmを指定した場合、警告を出すように修正。
ver1.76 2011年4月14日
メール送信フォームにCC、BCCを表示できるように修正。アップロードしたファイル名が文字化けすることがあるのを修正。
ver.1.75 2011年3月29日
ユーザーごとのアクセスログを記録するよう修正。
ver.1.74 2011年3月25日
ver.1.73でディレクトリ移動や、ディレクトリ表示がおかしくなっていたのを修正。
ver.1.73 2011年3月9日
ルートディレクトリ(アップロード用最上位ディレクトリ)より上のディレクトリにもアクセスできるモードを追加(管理者のみ)。
ver.1.72 2011年3月4日
ファイルのダウンロード回数をカウントできるように修正。
管理者設定ユーザーはユーザー側でユーザー設定を変更できないよう修正。
ver.1.71 2011年2月22日
パスワード自動生成ボタンを押すと、直接パスワードフォームに入力されるように変更し、
パスワード新規作成時や修正時はpasswordフォームではなく、textフォームを使用し、自動生成されたパスワードを目視確認できるようにしました。
ver.1.70 2011年2月16日
管理者設定画面表示部分を全面的に書き直しました。
ver.1.56 2011年2月2日
ファイルダウンロードのURLに含まれるパスワード情報を暗号化しました。
ファイル名に半角空白が入っているとダウンロードに失敗するのを修正しました。
ver.1.55 2011年2月1日
制限ユーザーのパスワード照合に失敗する場合があったのを修正しました。
メールアドレス未登録のユーザーもURLメール送信フォームを使えるように変更しました。
ver.1.54 2011年1月31日
ユーザーID、パスワードをクッキーに保存するかどうか選択できるように修正しました。また、ユーザー登録時に登録内容をメールで送信できるように修正しました。
制限ユーザーへのメール送信で、改行が増えてしまう場合があるのを修正しました。

ログインフォームに入力したユーザーIDとパスワードは、クッキーに保存されるので、一度入力してログインしたら、次回アクセスするとIDとパスワードが入力された状態になります。
これは、複数の利用者が使用している端末でアクセスする場合、セキュリティ上の問題があるので、ver.1.54でクッキーを保存するかどうか選択できるようにしました。
もちろんクッキーに保存したい場合もあると思うので、クッキーを保存するかどうかチェックボックスで選択できるようにしました。
デフォルトは一応クッキー使用OFFにしました。クッキーを使用するかどうかもクッキーに保存します。
一度クッキー保存をoffにすると、次回アクセスしたときもoffになっており、一度Onにすると次回アクセス時にはID、パスワードが入力された状態でクッキー使用のチェックボックスもOnになっています。

その一方で、ユーザーによる新規登録の場合、ユーザー自身がパスワードを決めますが、結構忘れてしまうということがあるのではないでしょうか。
生のパスワードも保存しているので、管理者モードで調べることも出来ますが、忘れるたびに管理者に問い合わせるのも煩わしいと思うので、
メールアドレスを登録したユーザーについては、新規登録時に登録メールアドレスあてに、ユーザーIDとパスワードのメモをメールで送れるようにしました。
ver.1.52 2011年1月27日
ファイルダウンロードのURLを修正しました。ファイル受け渡し先へのメール送信フォームで、メールタイトルも編集可能になりました。
メールを受け取ったファイル受け渡し相手は、ユーザー設定、メール送信、ディレクトリ作成、ディレクトリ移動を制限した制限ユーザーモードでログインするように修正しました。
ver.1.51 2011年1月26日
ファイルのURLを直接指定してダウンロードする方式から、CGIでダウンロードする方式に変更しました。
これによって日本語名のファイルもそのままダウンロード出来るようになりました。
また、ベーシック認証を使用する場合でも、ファイルをダウンロードする際にパスワード入力せずに済むようになりました。通常の使用ではベーシック認証を意識せずに済むようになりました。
ver.1.5 2010年11月26日
ファイル受け渡しの相手にアップロード、ダウンロード先のURLをメールで送信できるように機能追加しました。(メールアドレスを登録している場合)
ver.1.4 2010年10月20日
ユーザー側からの登録内容を、ユーザー側で修正、削除できるようにしました。
ver.1.38 2010年10月17日
旧バージョンからバージョンアップする際、上書きしても既存の設定を引き継げるように改修しました。
ver.1.37 2010年10月14日
ベーシック認証をする設定の場合、ユーザー側から登録すると、正しい.htaccessファイルが作られず、アップロードしたファイルにアクセスしようとしても認証されないというバグを修正しました。
.htaccessに記載するパスワードファイルのパスは絶対パスにすべきなのに、相対パスになっていたことが原因です。
ver.1.3 2010年9月27日
ユーザー側から新規登録できるようにしましたが、その変更に伴い、注意すべき点があります。
※1.3以前のバージョンから更新する場合は、必ず以下のディレクトリについてを読んでください。
ディレクトリについて
ver.1.22 2010年9月21日
ベーシック認証を使用する設定の場合、ファイルをダウンロードする際にベーシック認証が求められるのを避けるために、ファイルのダウンロードURLにユーザーIDとパスワードを含めていましたが、
InternetExplorerではURLに含めたユーザーIDとパスワードが無視されるようです。このため、バージョン1.22で、とりあえずダウンロードURLにユーザーIDとパスワードを入れないようにしました。
ログインしたあとも、ファイルのダウンロードの際、再度ベーシック認証でパスワードの入力が求められるようになります。

*1初期バージョンでは、アップロードしたディレクトリに直接ブラウザでアクセスすることによってファイルをダウンロードする仕様だったので、ファイルをダウンロードする際ベーシック認証が求められていました。
バージョン1.51からCGIでダウンロードするように変更したので、ベーシック認証は行わずに済むようになりました。しかし、.htaccessファイルはブラウザでアップロードディレクトリ内を直接見られるのを避けるために、引き続き作成できるようにしています。
CGIログイン時と同じユーザー名、パスワードでブラウザから直接アップロードされたファイルにアクセスすることが可能ですが、まず使う必要はないと思います。そういう意味では全てのアクセスを拒否する.htaccessでもいいのかもしれませんが。

*2たとえば、デフォルトのディレクトリがユーザー専用ディレクトリ内のXD4JmpLNXHJzU/subというディレクトリだったとすると、URLのdir=XD4JmpLNXHJzU/sub部分をdir=XD4JmpLNXHJzUと変更することによって、簡単に上層のディレクトリに移動できます。



16105


>>2014/02/12 21:54:07更新>>