CGI 2018年03月01日 10:31   編集
時間単位での細かい予定を書き込み、グラフ表示する予定表です。バグなどありましたら、CGIサポート掲示板までお願いします。
スパム投稿対策を追加しました。(2018/01/25)
誰でも入力・閲覧できるが、編集・削除は入力者のみというモードを追加しました。(2017/03/29)

特長

  • スケジュールの開始日時、終了時間を指定すると、スケジュールがグラフ表示されます。1画面で1か月分のスケジュールをグラフ表示します。重複した時間に複数のスケジュールを登録することもできます。
  • スケジュールの登録は1分単位で可能(設定による)ですが、グラフの表示はそこまで正確ではありません(^^;
  • グラフはスケジュールの名前によって自動的に違う色で表示されます。好みの色を指定することもできます。また、スケジュールにメモをつけることができます。
  • 2日間に渡る予定には対応していません。28時まで入力できるので、23:00~3:30のような場合は23:00~27:30のように登録することができます。
  • 定期的なスケジュールを一括入力、一括変更することができます。一括入力されたスケジュールも個別に編集することができます。
  • 管理者のみ登録可能にも、だれでも登録可能にも設定できます。
  • 検索機能付きです。
  • 個人用の予定表として利用されているケースがあるという話なので、ログインしたユーザーのみ閲覧、編集可能な個人専用ページを作れるよう機能追加しました。

個人専用ページについて

CGIを1個設置しておけば、複数のユーザーがそれぞれの個人専用ページを持つことができます。
  • 右上の時間表示の下にある個人専用(スケージュール名)へをクリックするとログインフォームが現れます。
  • ユーザー名とパスワードを入力して「ログイン」ボタンを押してください。入力したユーザー名とパスワードがすでに登録済みの場合はログインします。
    未登録の場合は登録するかどうか聞いてくるので、「登録する」を押してください。
  • 新規登録しようとして「ログイン」ボタンを押すと「パスワードが認証できません」と出る場合は、登録しようとしているユーザー名がすでに使用されています。
    ユーザー名を変更してから再度「ログイン」ボタンを押してください。

更新履歴

ver.1.22 2018.01.25
ダミーフィールドからの投稿を拒否するよう修正(スパム対策)。
ver.1.21 2017.11.16
予定名やメモにURLやタグを記述した投稿、開始時間と終了時間が同じ投稿を拒否するよう修正(スパム対策)。
ver.1.2 2017.3.29
誰でも入力できるが、修正・削除は入力者のみに限定するモードを追加
ver.1.15 2014.2.10
パスワードの暗号化にDigest::MD5モジュールを使用できるように変更。合わせてcryptでも9文字以上のパスワードも認識するように修正。
counter:4,463
CGI Perl 2017年02月08日 13:12   編集
perlのバージョンが新しくなったらCGIが動かなくなったという書き込みがサポート掲示板にあった。
Perl5.24ということだが、ローカルでCGIのテストに使っているXamppは最新版でもPerlのバージョンはは5.16なので、5.24での動作が確認できない。

Perlを5.24にアップデート

単体ではWindows用ActivePerlの5.24が公開されている。
Xamppの環境でこのActivePerlが使えるのかわからないが、取りあえずインストールしてみる。
XamppでPerlがインストールされているC:\xampp\perlに直接インストールしたいところだが、ダウンロードしたActivePerlのインストーラーはインストール先を変更できないようだ(それとも見落としたか?)
また、64bit版のインストーラーを使ったので、C:\Perl64というフォルダにインストールされてしまう。
取りあえずこれをXamppでインストールされたC:\xampp\perlフォルダにコピーすることにする。C:\xampp\perlは別名に変更してバックアップしておき、C:\Perl64の中身をすべてC:\xampp\perlにコピーしてみた。
これだけでうまくいくはずないよなと思ってCGIを実行してみると、あっさりと動いてしまって拍子抜けした。
print $];
でPerlのバージョンを確認してみると、無事
5.024001
と表示され、5.24にアップデートできたことが確認できた。

jcode.plのエラー

Perlをバージョン5.24にアップデートできたので、エラーが出るというCGIを実行してみると確かにエラーが出て実行できない。
エラーログを見てみるとjcode.plで
Can't use 'defined(%hash)'
というようなエラーが出ているようだ。確かにこの日本語変換ライブラリのjcode.plはかなり昔に書かれたものなので、最新のPerlで動かなくなっても不思議ではないかもしれない。Kent-Webなどで公開されているCGIを見てみるとjcode.plの後継ライブラリというjacode.plが使われているようだ。

jacode.plに更新

CPAN http://search.cpan.org/~ina/jacode/で最新版が公開されているようなので、
ダウンロードする。このうちjacode.plをjcode.plに置き換えればいいようだ。jcode.plを使っていたCGIでは
require './lib/jcode.pl'
というようなjcode.plを読み込んでいる部分を
require './lib/jacode.pl'
に変更する。
そのまま互換性があるのかよくわからないが、とりあえずエラーは出なくなった。
調べてみると同じ原因でエラーが出るCGIがけっこうあったので、すべて更新する必要があるようだ。

Jcode.pmを使用する

いまさらだけど、jcode.plのエラーを避けるためにjacode.plに更新ではなく、Jcode.pmを使うという方法もあるようなので追記しておく。Jcode.pmは最近はサーバーのほうに標準モジュールとしてインストールされているケースが多いようだが、Xampp同梱のPerlには入っていないようだ。なのでJcode.pm使う前提で公開するCGIにはライブラリディレクトリに入れておくのが無難のようだ。
例によってCPANでJcode.pmを検索し、ダウンロードしたJcode-2.0*.tar.gzを解凍し、Jcode.pmとJcodeフォルダをライブラリフォルダに入れておく。jcode.plが./libフォルダ内にあったなら、そこに入れておく。

元のCGIで
require './lib/jcode.pl';
という部分があったら
use lib './lib';
use Jcode;
と変更する。条件分岐する場合は
use lib './lib';
if ($use_jcodepm) {
    eval 'use Jcode;';
} else {
    require 'jacode.pl';
}
などとする必要がある。useはコンパイル時に実行されるので、if文の中に直接use Jcode;を書くと、if文の条件にかかわらずuse Jcode;が実行されてしまうからだ。

そしてjcode::またはjcode::となっている部分をすべてJcode::に変更する。
counter:8,444
CGI 2016年08月26日 12:23   編集

お知らせ

プライベートディレクトリの利用者がトレンドマイクロのセキュリティソフトを使用している場合、プライベートディレクトリへのログイン情報が外部に漏れる恐れがあります。対策を施したver.1.0に更新をお願いします。

受験戦争の過熱を抑えるためか、最近ではテストの偏差値を出さない学校が増えたようです。
しかし、試験の点数だけでは、成績が上がったのか下がったのか、イマイチわかりにくくて困る場合もあります。
こういうときはやはり偏差値がわかると便利です。
ウチの子供の学校の場合、偏差値は出さないけど、なぜか得点帯ごとの人数は出します。そこで、この得点帯ごとの人数から偏差値を計算するCGIを書いてみました。
データを保存して、偏差値の推移をグラフ表示することもできます。
(WEB素材配布室の折れ線グラフ表示スクリプトを使わせてもらいました。)

使い方

とりあえず使い方を説明します。

基本

基本的な使い方としては、最低限、偏差値を調べたい得点と得点エリアごとの人数を入力して「計算」ボタンを押します。得点エリアごとの人数を元に平均点を計算しますが、オリジナルデータの平均点がわかっているなら平均欄に入れると、そちらを優先して計算します。
満点が100点で、得点エリアを10分割するのがデフォルトですが、たとえば60点満点で6分割したい場合は満点「60」点、「6」分割と入力してください。

保存する

「計算」ボタンを押すと、その場で偏差値を計算するだけですが、入力したデータを保存しておけばいつでもデータが呼び出せて、科目ごとの偏差値の推移をグラフで表示することができます。もちろん、一般に公開できるデータではないと思うので、他の人の目に触れないようにするには
  1. WEBサーバーではなく、ローカル環境で実行する
  2. セキュリティ機能のあるサーバーで実行する
  3. 疑似偏差値計算CGIで他の人には見えないプライベートディレクトリを作り、そこにデータを保存する
などの対策が必要になります。
1と2についてはここでは説明しませんが、3について説明します。

プライベートディレクトリを作成する

  1. 画面右下にある「プライベートディレクトリに移動」リンクをクリックします。
  2. ログインフォームが出ますので、パスワードを入力してください。
  3. 「****は登録されていません。新たにディレクトリを作成しますか?」
    と聞いてくるので、「はい」をクリックしてディレクトリを作成します。
    パスワードといっても、実のところパスワードをURLエンコードした名前のディレクトリを作成しているだけです。
    どのような名前のディレクトリがあるかWEB上では見えないはずなので、実質的にパスワードと同じ働きをすると思います。
すでにディレクトリを作成している場合は、そのディレクトリにアクセスします。
当然ですが、簡単なパスワードだと他の人に見られてしまうおそれがあるので、なるべく複雑なパスワードにしてください。
サンプルでもプライベートディレクトリを作成、ログインできますが、24時間以上更新のないディレクトリは自動的にディレクトリごと削除するようにしています。
プライベートディレクトリにログインしても、ログファイルのアクセス先が違うだけで、操作などは汎用ディレクトリでの操作と全く同じです。

データの保存

データを保存する場合は、得点得点エリアごとの人数の他、試験名科目名前の入力も必須になります。
平均点は必須ではありませんが、わかっている場合は入力した方がより正確な偏差値が求められるかもしれません。
保存すると、上部にある選択フォームから過去のデータを即座に呼び出すことができます。
現在表示されているデータを編集して別のデータとして保存する場合は「保存する」ボタン、現在表示しているデータを修正する場合は「上書き保存する」ボタンを押します。
また、現在表示中のデータを削除するには、選択フォーム横の「を削除」ボタンを押します。
データをいくつか保存すると、そのデータによる偏差値の推移をグラフで表示することができます。
画面の下にある偏差値の推移のところにある名前をクリックすると、偏差値の推移グラフを別ウインドウで表示します。
選択ボックスや、偏差値推移グラフでデータはソートして表示されます。ソートの優先順位は名前、学年、試験名、科目の順です。
文字列でソートしますが、順番を変更したい場合は、選択ボックスの下にある試験名表示順や科目表示順をクリックすると、並び替え用のフォームが出ますので、これで編集してください。

参考

偏差値は以下の式で求められます。
偏差値 = 10 × (得点 - 平均) ÷ 標準偏差 + 50
標準偏差は
すべての得点について(得点 - 平均)の2乗を合計し、これを全体の人数で割って、さらにれを平方根にしたものです。たとえば
13 25 38 42 50 53 59 64 77 89
という点数のグループがあったとすると、
平均 = ( 13 + 25 + 38 + 42 + 50 + 53 + 59 + 64 + 77 + 89 ) ÷ 10 = 51

標準偏差は
((13-51)×(13-51)+(25-51)×(25-51)+(38-51)×(38-51)+(42-51)×(42-51)+(50-51)×(50-51)+(53-51)×(53-51)+(59-51)×(59-51)+(64-51)×(64-51)+(77-51)×(77-51)+(89-51)×(89-51)) ÷ 10 = 472.8
さらにこの平方根をとって
標準偏差 = 21.743964679883
となります。
このグループの中で59点の得点の偏差値は
10 × (59 - 51) ÷ 21.743964679883 + 50 ≒ 53.6791
となります。
この疑似偏差値計算機では、上記のような得点のグループを
1~20点 1人
21~40点2人
41~60点4人
61~80点2人
81~100点1人
のようにサンプル化して計算します。
たとえば41点~60点に相当する部分は
42 50 53 59
という得点分布ではなく、41点~60点の平均である50点が4人と単純化して計算します。
先ほどの標準偏差を求める途中の計算は
((10-51)×(13-51)×1+(30-51)×(30-51)×2+(50-51)×(50-51)×4+(70-51)×(70-51)×2+(90-51)×(90-51)×1) ÷ 10 = 468.7
のように単純化され、これによる標準偏差は21.6494803632789
となります。

誤差

オリジナルのデータから計算した偏差値と、サンプリングしたデータから計算した疑似偏差値と、どれくらいの誤差があるか、疑似偏差値誤差確認のためのCGIを書いてみました。
これで100回ぐらい計算してみたら、一番大きかった誤差の値は
標準偏差で1.02 偏差値で0.93ぐらいでした。
誤差の平均は、
標準偏差で0.26 偏差値で0.21ぐらいでした。
最大誤差があったとしても、+-1ぐらい見ておけば十分でしょう。
たとえば、疑似偏差値計算機で62.45という結果が出たら、
61.45~63.45の範囲にはほぼ収まるだろうということです。
まあ、参考にはなる程度の値は出せるのではないかという感じでしょうか。
counter:4,231
CGI 2016年08月22日 12:22   編集

お知らせ

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
大幅な改修を行いました。これまで、ゲストアカウントはユーザーと同じディレクトリにアクセスできて、アクセスできる期間にも制限はありませんでしたが、
セキュリティ管理しやすさを考慮して、アクセスできる期間と、アクセスできるディレクトリを制限することにしました。
従来のゲストモード(無期限でユーザーと同様にすべてのディレクトリにアクセスできる)も今回は残していますが、将来的には廃止する方向です。
アクセス可能期間、アクセスディレクトリを制限するアカウントをゲストという名前にするなら、従来のゲストを別の名前にしなければなりませんが、
いい名前が思いつかないので、限定なしゲストとしています。
細かいところですが、ゲストがアクセスしたときに、専用ディレクトリが○○さん専用となっているのもおかしいので、ユーザー名の敬称を省略しました。

counter:4,235
CGI 暗号 2016年08月22日 12:21   編集
パスワードを保存する必要のあるCGIでは、生のパスワードのまま保存するより、暗号化したほうが安心ということでこれまですべてcrypt関数で暗号化した上で保存していました。
このcrypt関数は手軽に使えて便利なのですが、有効なパスワードの文字数が8文字までという制限があります。

たとえば、「password123」というパスワードをcryptで暗号化して保存すると、9文字以降は無視されるため、「password」でも、「password012」でも正しいパスワードと認識されてしまいます。

Digest::MD5モジュールを使う

これは、やはりマズイので、何とかできないか調べてみました。続きを読む
counter:4,398
CGI 2016年08月22日 12:21   編集
このサイトで公開しているプログラムはフリーソフトです。個人・法人に限らず利用者は自由に使用することができますが、著作権は放棄していません。
  • 利用者はプログラムの著作権表示を削除する事は出来ません。必ず「見える」位置に表示してください。

    また削除しなくても、極端に小さくしたり、配色の具合等により表示を見えにくくしてしまう行為も実質的な削除行為となります。
  • プログラムを改造して利用することは自由です。
    プログラムを改造し再配布することについては、今のところ想定していません。
  • すべてのプログラムが、すべての環境で動作する事は保証していません。
  • 当サイトのプログラムを利用した事によるいかなる損害も作者は一切の責任を負いません。
  • 作者に著しく不利益があると判断した場合には一方的にプログラムの使用を中止していただくことがあります。
  • 設置に関する質問はすべてCGIサポート掲示板でお受けします。直接メールによるサポートは行なっておりません。
  • この「利用規定」は予告なく改編・加筆を行うことがあります。
counter:3,877
CGI 2016年08月22日 12:20   編集

マルチアップローダを新規設置する

新しくマルチアップローダを設置する方法です。
  1. ダウンロードしたファイル(multiupload.zip)を解凍します。multiuploadフォルダ内に
    • 2.gifmultiupload.cgi
    • 2.gifindex.html
    • 2.gifjcode.pl
    • 2.gifmimew.pl
    • 2.gifemail_chk.pl
    • 2.gifstyle.css
    • 2.gifurlhelp.html というファイル
    • 1.gifimg
    • 1.gifmail_template というフォルダができるはずです。
  2. multiupload.cgiの1行目の
    #!/usr/local/bin/perl
    はサーバーにあったパスに書き換えて、上記のファイル、フォルダをすべてFTPクライアントソフトでサーバーにアップロードします。
    アップロード前にcgiファイルを直接編集してスクリプトの設定を変えることもできますが、(config_startからconfig_endまでのユーザー設定部分)
    管理者パスワード($adminpass)は直接編集しないでください。また、スクリプトの設定はあとで管理者設定画面から編集することができます。
  3. multiupload.cgiのパーミッションを実行可能なものに変更します。
    これは使用するサーバーによってまちまちだと思いますが、755や705と言う場合が多いかもしれません。このサイトで使用しているロリポップでは700でした。
    すでに稼働中のCGIがあれば、それと同じパーミッションにしておけば間違いないでしょう。
  4. WEBブラウザでmultiupload.cgiにアクセスします。
    初めてのアクセスだったら(つまり管理者パスワードが未登録なら)、管理者用パスワードを設定するフォームが出るので、登録したいパスワードを入力して「登録」ボタンを押します。
    登録したパスワードは暗号化されてmultiupload.cgiファイルに書き込まれます。
    このため、multiupload.cgiファイルのmy $adminpass = の部分に直接パスワードを入力すると、正しいパスワードとして認識されませんので、ご注意ください。
    また、初めてのアクセスでもパスワード登録フォームが表示されず、結局管理者としてログインできなくなってしまいます。
    もし、このような状態になったら、$adminpass に何も入力されていない状態に戻して、再度multiupload.cgiをサーバーにアップロードしてください。
    ※バージョンアップなどで、multiupload.cgiを上書きアップロードした場合は、すでに登録したパスワードが自動的に引き継がれます。
  5. 管理者設定画面に入るので、メニューの[スクリプトの設定]をクリックして初期設定を行います。赤で表示されている項目があったら、設定に問題があるので修正します。
    sendmailのパス($sendmail)や文字コードライブラリ($encode_lib)の修正が必要かもしれません。サーバーに合った設定に変更してください。
    また、管理人にメールで通知する設定にするなら、管理人のメールアドレスを登録する必要があります。
    ここで設定できるのは、
    CGIのタイトル、管理者の名前、管理者のメールアドレス、サーバーのsendmailのパス、ユーザーからの登録を受け付けるかどうか、インストールディレクトリより上位のディレクトリへのアクセスを認めるか(管理者のみ)、メールアドレスの登録を必須にするかどうか、メールアドレスの書式をチェックするかどうか、ユーザー登録やファイルのアップロード時に管理人にメールで通知するかどうか、パスワードの最低長さ、ユーザー名最大長さ、アップロードディレクトリ内に自動的にindex.htmlファイルを作ってディレクトリ内が直接見られないようにするかどうか、そのindex.htmlを隠すかどうか、
        ・・・などです。
  6. 管理者でユーザーを登録する場合は、[ユーザー管理]をクリックし、ユーザー入力フォームから登録します。
  7. メールアドレスを登録した場合、そのアドレスあてに、登録したユーザーID、パスワードをフォームメールで通知することができます。
    ユーザー一覧からの、そのユーザーのメールアドレスをクリックすると、メールフォームが表示されます。

マルチアップローダをバージョンアップする

すでにマルチアップローダをサーバーにアップしていて、新しいバージョンにアップする手順です。
  1. ダウンロードしたファイル(multiupload.zip)を解凍します。
  2. multiupload.cgiの1行目の
    #!/usr/local/bin/perl
    はサーバーにあったパスに書き換えて、解凍してできたファイル、フォルダをすべてFTPクライアントソフトでサーバーに上書きアップロードします。
    登録した管理者パスワードや、カスタマイズしたスクリプトの設定は自動的に復元されます。
counter:4,107
CGI 2016年08月22日 10:57   編集

ベーシック認証

ユーザー専用ディレクトリに直接アクセスされるのを防ぐため、オプションで.htaccessによるベーシック認証機能を追加できるようにしました。.htaccessに対応しているサーバーでのみ使用可能です。
ブラウザから直接専用ディレクトリにアクセスしてファイルをダウンロードする必要はなくなったので、すべてのユーザーからのアクセスを拒否するように変更してもよかったのですが、登録ユーザー名とパスワードでアクセスできるという仕様はそのままです。しかし、まず使う必要はないし、普段は特に意識する必要はありません。

.htaccessが使えないサーバーでは、せめてディレクトリの中身の一覧が見られないように、ディレクトリ作成時に中にindex.htmlを作成する $make_index を1にしておいた方がいいでしょう。
ユーザー登録で作成される専用ディレクトリ名がランダムな文字列で生成されるのも、外部から直接専用ディレクトリにアクセスされにくくするためです。

.htaccessと.htpasswd

ベーシック認証に必要な.htaccessと.htpasswd はユーザー登録、修正時にCGIが自動的に作成するので、通常は特に意識する必要はありませんが、簡単に仕組みを説明しておきます。
.htaccess をおいたディレクトリと、その下層ディレクトリにベーシック認証が有効になります。
.htaccess 内には、このディレクトリにはベーシック認証が必要ですということと、認証に照合するパスワードを書いたファイルへのパスが書かれています。

たとえば、ユーザー1の設定ディレクトリ(ユーザー1がアクセスできる最上層のディレクトリ。以下ルートディレクトリと呼ぶ)が./upload/dir1だとすると、このディレクトリ内に.htaccessに置きます。
.htaccess内には、ユーザー1のパスワードの保存先を記入することになります。
パスワードの保存先は専用のディレクトリ内にします。外から存在がわからないように名前をランダムな文字列にします。このディレクトリ内はアップロード用ディレクトリ内と同じディレクトリ構成にして、該当ディレクトリ内に.htpasswdを作成します。
.htpasswdにはユーザーIDとパスワードを書き込みます。
multiupload/ multiupload.cgi
|
+--- upload / (ユーザー2のルートディレクトリ)
|     |
|     +--- .htaccess (パスワードファイルへのパス
|     |                 jhf5S30j78vc/upload/.htpasswd)
|     |
|     +--- dir1 / (ユーザー1のルートディレクトリ)
|            |
|            +--- .htaccess (パスワードファイルへのパス
|                             jhf5S30j78vc/upload/dir1/.htpasswd)
+--- jhf5S30j78vc /
         |
         +--- upload /
                |
                +--- .htpasswd (ユーザー2のパスワード保存)
                |
                +--- dir1 /
                     |
                     +--- .htpasswd (ユーザー1のパスワード保存)
このユーザー1のルートディレクトリより、上層のディレクトリをルートディレクトリに設定されたユーザー(たとえば./uploadをルートディレクトリにするユーザー2)にとっては、ユーザー1のルートディレクトリ(./upload/dir1)はサブディレクトリに相当します。

下層ディレクトリには、認証無しでアクセスできるようにしたいのですが、下層の.htaccessの設定が優先されるらしいので、./uploadに.htaccess を置いて、jhf5S30j78vc/uploadに.htpasswdを置くだけではアクセスできません。

このため、ユーザー設定時にルートディレクトリの下層に他のユーザーのルートディレクトリがある場合は、その下層ディレクトリに相当する.htpasswd にもパスワードを保存することにしました。
逆に設定したユーザーのルートディレクトリの上層のディレクトリをルートディレクトリとするユーザーがいたら、そのパスワードも.htpasswd に保存する必要があります。
multiupload/ multiupload.cgi
|
+--- upload / (ユーザー2のルートディレクトリ)
|     |
|     +--- .htaccess (パスワードファイルへのパス
|     |                 jhf5S30j78vc/upload/.htpasswd)
|     |
|     +--- dir1 / (ユーザー1のルートディレクトリ)
|            |
|            +--- .htaccess (パスワードファイルへのパス
|                             jhf5S30j78vc/upload/dir1/.htpasswd)
+--- jhf5S30j78vc /
         |
         +--- upload /
                |
                +--- .htpasswd (ユーザー2のパスワード保存)
                |
                +--- dir1 /
                     |
                     +--- .htpasswd (ユーザー1とユーザー2のパスワード保存)
.htpasswd に保存するパスワードですが、ローカルサーバで実験したときはcryptしたパスワードでは照合できず、生のパスワードでないとダメでした。
このため、わざわざ別に生のパスワードを保存する処理を追加していたのですが、その後Web上でテストしてみると、cryptしたパスワードで大丈夫なことがわかりました。
結局生のパスワードは保存しないですむことになりました。
.htpasswdも直接見られる心配はないのかもしれませんが、パスワード保存ディレクトリは、管理者パスワード生成時に自動的にランダムな文字列のディレクトリ名を作成するようにしています。
counter:3,776
CGI 2016年08月16日 15:04   編集

お知らせ

ユーザーがトレンドマイクロのセキュリティソフトを使用している場合、アクセス制限ページのログイン情報が外部に漏れる恐れがあります。対策を施したver.1.12に更新をお願いします。

需要がどれくらいあるかわかりませんが、ファイルの更新時間を変更するCGIを公開しました。
私の場合は、掲示板などのログファイルの更新時間を変更するのに使っています。
なぜ、ログファイルの更新時間を変更する必要があるかというと、スパム投稿対策のためです。ウチの検索サイトでは、掲示板などのログファイルの更新時間をチェックして、何日以内の更新だったら new! 表示したりしています。当然ながらスパム投稿の場合でもログファイルが更新されると new! 表示されます。
スパムを削除してもログファイルの更新時間は元には戻りません。(スパムを削除した時間にさらに更新されるだけです。)
そうすると、スパムを削除してログの中身は元の状態に戻っているのに new! 表示だけが残ってしまうことになります。
これはやはり具合が悪いので、こういう場合は更新時間変更CGIでログファイルの更新時間を、スパムが投稿される元の時間に戻すようにしています。

また、最近はWEB上ではなく、パソコン内のファイルの更新時間を変更したいというケースもあるので、ローカル環境でも使いやすいよう改修したものを公開することにしました。テキストボックスに入力したディレクトリに移動できるようになっています。日本語のフォルダやファイルにもアクセスできるようです。(すべて大丈夫かわかりませんが)

web上での使用も考えて、簡単なアクセス制限機能もつけています。このCGIはファイルの更新時間を変更することしかできませんが、使い方によっては見えてはいけないファイルも見えてしまうという危険があるからです。WEB上に設置する場合、極力わかりにくいパスワードを設定してください。
ver.1.12 2013/03/14
ログイン後の認証を一時ファイルによる認証に変更。
ver.1.1 2011/06/17
秒単位まで編集できるようにしました。
パスワードは「guest」です。サンプルなので、ディレクトリの移動に制限をかけています。

設置

ダウンロードしたファイルを解凍したら、time_stamp.cgi1行目の
#!/usr/local/bin/perl
をサーバーに合わせて変更してください。

パスワード制御するなら(24行目がmy $use_pass = 1;なら)
25行目の
my $pass = '';
にパスワードを入れてください。
修正は以上です。あとはサーバーにアップロードしてtime_stamp.cgiのパーミッションを適当に設定してください。

使い方

  • 更新時間を変更したいファイル名をクリックすると、変更フォームが現れます。「指定した時間に変更する」を選んで、日時を変更し、「タイムスタンプ修正実行」ボタンを押すと更新時間が変更されます。
    「現在に変更する」を選んだ場合は、現在の時間に更新されます。

  • ディレクトリ名をクリックするとそのディレクトリに移動します。ディレクトリ名クリックはそのディレクトリへの移動に割り当てているので、ディレクトリの更新時間変更はとりあえずできません。

  • ファイル名、ファイルのサイズ、最終更新時間でソートできます。たとえば、名前をクリックするとファイル名を昇順でソートします。もう一度名前をクリックすると降順でソートします。
    サイズ、最終更新時間のソートも同じように2度続けてソートすると表示順を逆にします。
  • フォルダとファイルは分けて表示しますが、フォルダを先に表示したり、ファイルを先に表示したりすることができます。
存在しない日付や時間への変更はできませんが、存在してもUNIX元年(1970年1月1日)より前や、2038年1月19日以降の日付には変更できません。
・・・と思っていたら、いつの間にか1970年以前や2038年以降への変更もできるようです。PHPと同様にサーバーのPerlも64bit化されているのかもしれません。
counter:3,852