ごあいさつ
この度は当CGIをダウンロードして頂き、誠にありがとうございます。
dorama.cgi及びdorama_ini.cgi、dorama_denyallow.cgiファイルを編集を行う前に、当マニュアルをぜひご一読ください。
なお、このマニュアルはWeB DoRaMaを設置した人向けに書かれております。
前書き
俺がこのCGI/Perlの改造を行った理由は、悪質な荒らし・利用者の指揮及び連続投稿・自作自演によるによるコンテンツ支配が多発したのと、ウェブブラウザ搭載の携帯電話の普及に伴い、ネットワーク人口が増大した事が契機なのかも知れません。
しかし、このスクリプトに出会ってしばらくして、改造を行いました。
初期版は環境変数とかを追加しただけの粗末な物でしたが携帯電話向けの掲示板スクリプト及び各キャリアの公式ホームページを閲覧し、調べ上げ、他のスクリプトから移植した結果が現在のスクリプトの原型ともなりました。
その後、現在に至るまで様々な改変とスクリプトの最適化等を行った為、現在の姿に近付きました。
携帯経由のアクセスによるレイアウトの変更及びスクリプトの改良、アクセスキー使用による利便性の向上、セキュリティの向上、内部機能の改良、ロックスクリプトの改変により現在の姿になりました。
苦い経験があった為、現在の物が出来た事になったのは紛れも無い事実なのかも知れません…
★機能説明
Shigeto Nakazawa氏作のWeB DoRaMaにいくつかの荒らし対策機能を強化たものです。
変更点は以下のとおりです。
・プロキシ経由の場合にJava経由で投稿して生IPを獲得するモードを追加(このモードではプロキシ経由と判断した場合に、Javaからプロキシを経由させないで生IPで投稿します)。
ただしその場合ブラウザによっては投稿できなくなります。
投稿直前にプロキシを設定した場合や外部からの投稿等で、Javaを経由しないでプロキシ経由で投稿された場合は排除します。
強制的にJava経由モードにすることができます(現在新しいJava VMでは動作しない状態になっていますので、修正されるまでこのモードは使わない方が良いです)。
・連続投稿ツール対策の強化。
オリジナル版で連続投稿可能な、フェイザー型連続投稿ツールによる連続投稿をされにくくしました。
Java経由モードの場合は連続投稿ツールによる投稿はかなり困難です。
・プロキシチェックの強化(mm氏作ルーチンを使用)。
設定によってプロキシによく使われるドメイン名が獲得できないIPやjpドメインでないホストをプロキシ経由とみなすようにできます。
・プロキシ経由とみなされた場合でも許可するIP/ホスト/クッキーの指定。
・同一内容投稿の禁止。
・拒否IPの指定にホスト名を指定できるように変更(IPの指定に比べてアクセス規制がしやすくなります)。
・同一PC判定のためのクッキーの記録とクッキーによるアクセス規制・許可cid〜と表示されるのがクッキーです。
IPによるアクセス規制と違って個別にアクセスの規制・許可が行なえるので他の人まで規制されることを防ぐことができます。
IPで規制して、イタズラしないのに規制される人をクッキーで許可するのが効果的だと思います。
・新機能としてWILLCOM以外の携帯電話情報取得機能を追加(簡易的に取得するのみですが…)。
(ただし、副作用によりPC経由の情報も取得してしまうと言う機能も入っています…)
・管理者専用エディタのみどの端末で投稿したかを知る事が出来るようになった(例えばDoCoMoの場合は mova 及び FOMA と言うぐあいに)。
・携帯経由の投稿制限機能の追加(ただし、携帯電話情報(シリアルbェ含まれていなくとも)が読まれるとヤバイ事になるのでログファイルを別の名前に書き換える事をお勧めしますw)。
・新たなロック機構の採用。
・openをより強化し、ログが突然消えにくくなった。
『携帯のみの新機能』
・携帯でのアクセス時にレイアウトが変わる。
単独スクリプトではあまり例の無い試みですが、容量が若干軽量化されると思います。
・携帯のみキー操作によるをダイレクトアクセス機能を追加。
従来と比べてもかなりの手間がかかりません♪
その代わり、ファイル自体がかなり重くなりました…(^^;
★設置方法
アーカイブには以下のファイルが含まれています。
readme.txt ... このファイルです
dorama.cgi ...CGIスクリプト
dorama_denyallow.cgi ... 投稿制限及び許可設定ファイル
dorama_init.cgi ... 設定ファイル
dorama.log ... 記録ファイル
dorama.act ... 出演者用ファイル
accesslog.txt ... 簡易アクセスログ記録ファイル
errlog.txt ... エラー記録ファイル
dorama.gif ... 画像ファイル(Thanks Mina)
jacode.pl ... 日本語変換ライブラリ(Thanks Kazumasa Utashiro)
dorama.jar ... IP抜き用アプレット
applet.cgi ... 特殊サーバー用アプレット送信CGI(通常は設置不要)
dorama.gif ... ドラマの画像
dorama.css ... ドラマのスタイルシート
dorama.js ... ドラマのJavaスクリプト
heart.jpg ... 画像変換用画像
heart_m.gif ... 画像変換用画像
heart_m.png ... 画像変換用画像
namida.jpg ... 画像変換用画像
namida_m.gif ... 画像変換用画像
namida_m.png ... 画像変換用画像
makka.jpg ... 画像変換用画像
makka_m.gif ... 画像変換用画像
makka_m.png ... 画像変換用画像
jito.jpg ... 画像変換用画像
jito_m.gif ... 画像変換用画像
jito_m.png ... 画像変換用画像
kyupin.jpg ... 画像変換用画像
kyupin_m.gif ... 画像変換用画像
kyupin_m.png ... 画像変換用画像
Nifty(homepage?.nifty.com)の場合は、「★Nifty(homepage?.nifty.com)の設置」を読んでください。
BIGLOBEのwww5?.biglobe.ne.jpサーバーの場合は、「★BIGLOBE(www5?.biglobe.ne.jp)の設置」を読んでください。
まずdorama.cgiを設置環境に応じて編集します。
一行目が設置するサーバーのPerlのパスと異なっている場合は変更します。
普通は全てのファイルを同じディレクトリ(フォルダ)内に置けば良いです。
(プロバイダによって指定されている場合は、オプション設定で変更の必要あり)
以下のファイルをアスキーモードで転送し、パーミッションを後の[]の中の値に設定します。
設置するHP領域のサポートページで推奨している値があったらそちらを設定します。
特に理由がなければ、セキュリティのためなるべく左の方の値を設定するようにしてください。
・dorama.cgi [700|705|755]
・dorama_denyallow.cgi [700|705|755]
・dorama_init.cgi [700|705|755]
・jacode.pl [600|604|644]
・dorama.log [600|606|666]
・dorama.act [600|606|666]
・accesslog.txt [600|606|666]
・errlog.txt [600|606|666]
・dorama.gif [604|644]
・dorama.css [604|644]
・dorama.js [604|644]
・heart.jpg [604|644]
・heart_m.gif [604|644]
・heart_m.png [604|644]
・namida.jpg [604|644]
・namida_m.gif [604|644]
・namida_m.png [604|644]
・makka.jpg [604|644]
・makka_m.gif [604|644]
・makka_m.png [604|644]
・jito.jpg [604|644]
・jito_m.gif [604|644]
・jito_m.png [604|644]
・kyupin.jpg [604|644]
・kyupin_m.gif [604|644]
・kyupin_m.png [604|644]
dorama.gifとdorama.jarはバイナリモードで転送します。
★Nifty(homepage?.nifty.com)の設置
画像ファイルはhttp://homepage?.nifty.comでないと表示されないので、$back_urlをhttp://homepage?.nifty.com/アカウント名/配下のディレクトリに設定してdorama.gifを対応したディレクトリにバイナリモードで転送します(?は自分のHP領域のサーバーの番号です)。
アプレットはhttp://hpcgi?.nifty.comサーバーから直接ダウンロードできないためcgiを経由してアプレットをダウンロードするようにします。
$appleturl はapplet.cgiの設置URIを設定します。
dorama.cgiと同じディレクトリなら「./applet.cgi」に設定します。
$appletdir はapplet.cgiの設置URIがdorama.cgiと同じディレクトリなら「.」に設定します。
以下のファイルをcgi-binディレクトリの下のフォルダに
アスキーモードで転送し、パーミッションを後の[]の中の値に設定します。
・dorama.cgi [700|705|755]
・dorama_denyallow.cgi [700|705|755]
・dorama_init.cgi [700|705|755]
・applet.cgi [700|705|755]
・jacode.pl [600|604|644]
・dorama.log [600|606|666]
・dorama.act [600|606|666]
・errlog.txt [600|606|666]
doramaj.jarをapplet.cgiと同じディレクトリにバイナリモードで転送します。
dorama.gifとdorama.cssは別フォルダへ転送します。
エラーログをブラウザで確認したい場合は$error_logを/homepage/ディレクトリの下にしておくとエラーログをブラウザで見ることが出来ます。
★BIGLOBE(www5?.biglobe.ne.jp)の設置(?は設置先のサーバーの英字)
画像ファイルはwww5?.biglobe.ne.jpでないと表示されないので
$back_urlをwww5?.biglobe.ne.jp/アカウント名/配下のディレクトリに設定して
dorama.gifを対応したディレクトリにバイナリモードで転送します。
(?は自分のHP領域のサーバーの番号です)。
アプレットはhttp://cgi.www5?.biglobe.ne.jpサーバーから直接ダウンロードできないためcgiを経由してアプレットをダウンロードするようにします。
$appleturl はapplet.cgiの設置URLを設定します。
dorama.cgiと同じディレクトリなら「./applet.cgi」に設定します。
$appletdir はapplet.cgiの設置URLがdorama.cgiと同じディレクトリなら「.」に設定します。
以下のファイルをドラマ用ディレクトリの下のフォルダにアスキーモードで転送し、パーミッションを後の[]の中の値に設定します。 ・dorama.cgi [700|705|755]
・dorama_denyallow.cgi [700|705|755]
・dorama_init.cgi [700|705|755]
・applet.cgi [700|705|755]
・jacode.pl [600|604|644]
・dorama.log [600|606|666]
・dorama.act [600|606|666]
・errlog.txt [600|606|666]
doramaj.jarをapplet.cgiと同じディレクトリにバイナリモードで転送します。
dorama.gifとdorama.cssは別フォルダへ転送します。
★設置後の動作確認
転送とパーミッションの設定が完了したらdorama.cgiにアクセスしてうまく設置できているか確認します(BIGLOBEのwww5で始まるサーバーの場合はdorama.cgiにリンクしたHTMLからアクセスします)。
始めてドラマが動いた時は、
???「」
???「」
???「」
???「」
???「」
と表示されたら正常に動作しています。
後は何回か登録するとちゃんとしたドラマになります。
あとはカスタマイズ項目を自分のページに合わせて設定して、出演者エディタで出演者を設定すれば設定完了です。
セキュリティー項目はセキュリティー項目の設定についてを参照してください。
出演者エディタで設定する場合、削除すると表示がおかしくなるのでなるべく削除は避けるようにしてください。
★トラブルについて
JavaによるIP抜きモードになった場合はJavaScriptからのJavaの呼び出しに対応していないブラウザで投稿しようとするとJavaScriptのエラーになります。
Netscapeの場合6.01以前でエラーになるようです。
その場合@allow_ipadに投稿できなくなる方のIPアドレス/ホスト名を記述することで回避できます。
JavaによるIP抜きモードを使用しているとユーザーエージェント(ブラウザ情報)が記録されなくなります…
CGIに不都合がある場合はオリジナルの配布元のCGI-StaTionのトラブルシューティングのページとサポート掲示板が参考になります。
ただしShigeto Nakazawa氏の迷惑になりますのでサポート掲示板やShigeto Nakazawa氏へのメールでの質問はしないでください。
質問やトラブルの報告は当方の伝言板をご利用下さい。
CGIの知識があまりないので(^^;)、充分な対応ができない場合がありますので
あらかじめご承知ください(ちなみに俺もですが…)。
★セキュリティ項目の設定
*投稿制限及び許可設定ファイル
・禁止ワード:@BAD_WORD = ('〜','〜');
書きこまれたくない言葉をここに記述すると、その言葉を含む単語などを投稿できなくします。
他のその言葉を含む内容も排除されるので設定には注意してください。
@BAD_WORD = ('禁止ワード1','禁止ワード2','…');というように '' の中に単語を書き、 , で区切って増やします。
間の空白を削ってからチェックするので、空白を入れないようにしてください。
・投稿規制:@check_ipad = ('〜','〜');
イタズラをする人のIPアドレス/リモートホスト/携帯端末情報/クッキーからの投稿を排除します。
イタズラする人のIP/ホスト/携帯端末情報/クッキーを記述することで、そのIPアドレスからの投稿はできなくなります。
ダイアルアップ等の場合はIPアドレスが毎回変ることがあります。
(例)
IP1A123.tky.host.ne.jp
IP1A001.tky.host.ne.jp
と変わる場合、その場合は先頭に*を付けてホスト名の変化する数字より後の部分を指定します。
@check_ipad = ('*tky.host.ne.jp');
ホスト名が獲得できなくてIPアドレスのみになる場合は最初の3つだけを記入するようにします。
@check_ipad = ('123.456.789.');
・投稿規制(クッキー):@check_cokkie = ('〜','〜')
イタズラをする人のIP/ホスト/携帯端末/クッキーからの投稿を排除します。
イタズラする人のIP/ホスト/携帯端末/クッキーを正確に記述することで、そのIP/ホスト/携帯端末/クッキーからの投稿はできなくなります。
また、ここに''を追加するとクッキーを無効にした状態での投稿を排除します。
ただしクッキーを無効にしたり削除すると投稿できてしまいます。
・投稿許可IP:allow_ipad = ('〜','〜');
ここに プロクシ経由でないのに投稿できなくなる方の IP/ホスト/携帯端末情報/クッキー名を書いておくと、そのIP/ホスト/携帯端末情報/クッキーからの投稿を許可しますが、Javaの生IP抜きが行われなくなります。
記述の形式は@check_ipadと同じです。
・投稿許可クッキーID:@allow_cookie = ('〜','〜');
ここにイタズラをしてないのにアクセス規制・プロクシ経由規制で投稿できなくなる方のIP/ホスト/携帯端末/クッキーを正確に書いておくと、そのIP/ホスト/携帯端末/クッキーからの投稿を許可しますが、Javaの生IP抜きが行われなくなります。
*設定ファイル
・不正アクセス防止:$check_url = "〜";
荒らしスクリプト等の他URIからの投稿を拒否します。
このCGIの正確な URL (http://〜) を記述します。
Windows CE等環境によって投稿できなくなることもあります。
・他サイトからの入室禁止:@allow_url = ('〜','〜');
ここに入室を許可するURLを設定しておくと、
設定したURLを含むURLからのみ、入室と投稿を許可します。
他サイトからの入室とURLを直接入力しての入室は排除されます。
@allow_url = ('許可URL1','許可URL2');というように '' の中にURLの一部を書き、 , で区切って増やします。
ここを設定する場合は必ずこのCGIの設置URLも許可されるようにしてください。
$check_proxyを2か3に設定している場合、
アドレスバーに直接URLを入力すると入室できてしまう場合があるので
この機能を使用する場合は$check_proxyを2か3に設定しない方が良いです。
*注意
携帯の機種によってはリファラを吐きませんので(ブラウザの仕様)よほどの事が無い限り設定しないほうがいいと思われます。
・匿名プロクシ制限:$check_proxy = n;
匿名プロクシを使って荒らし行為が行われる場合に設定します。
この匿名プロクシ制限と、上のIPアドレス制限でほとんどの荒らしを排除可能です。
値の意味は以下の通りです。
0 … 匿名プロクシを制限しません。
1 … 匿名プロクシからの投稿を拒否します。
2 … 匿名プロクシの場合はJavaで生IP抜きを行って投稿します。
3 … 匿名プロクシでなくてもJavaで生IP抜きを行って投稿します。
匿名プロクシチェックはCATVやイントラネット経由の環境等
プロクシ経由でなくてもプロクシとみなしてしまうことがあります。
この値を2に設定するとプロバイダのIPで投稿させることができます。
この場合はプロバイダのIPがIPアドレス制限に登録されている場合だけ排除されます。
ただしブラウザや環境によっては投稿できなかったり、トラブルが起きる場合があります。
Netscapeの場合6.01以前でエラーになるようです。
またマッキントッシュの場合は環境によってトラブルが起きるらしいです。
この場合は後の許可IPアドレスにその人のホストかIPアドレスを設定することでJavaの生IP抜きなしで投稿を受け付けるようになります。
なるべく訪問者の環境から判断して設定した方が良いでしょう。
・リモートホスト情報のないIPを排除:$check_host = n;
$check_proxyを0以外にした場合にここの値を 1 にすると、プロキシによく使われるドメインネームの取得ができないIPをプロキシ経由とみなします。
一部のリモートホスト情報の取得ができないプロバイダまでプロキシ経由とみなすので設定には注意してください。
HP領域がリモートホスト情報の取得ができないサーバの場合は全てプロキシ経由とみなすので0のままにしてください。
・jpドメイン以外を排除:$only_jp = n;
$check_proxyを0以外にした場合にここの値を 1 にすると、プロキシによく使われるjp以外のプロバイダをプロキシ経由とみなします。
Yahoo!BBやuu.net等jp以外のプロバイダまでプロキシ経由とみなすので設定には注意してください。
HP領域がリモートホスト情報の取得ができないサーバの場合は 0 のままにしてください。
・でたらめの内容の排除:do_check_frq = n;
ここの値を 1 にすると、同じ言葉の繰り返し等使用文字種が異常に少ない投稿を排除します。
効果音や叫び声等が排除されやすいので、なるべく設定しないほうが良いでしょう。
・同じIP/ホスト/携帯端末/クッキーから次の投稿を許可する時間:wait_time = n;
設定した秒数が経過するまで、同じIP/ホスト/携帯端末/クッキーのブラウザからの次の投稿を排除します。
クッキーを無効にして投稿した場合は、設定した秒数が経過するまでクッキーなしの投稿を排除します。
大量に連続投稿されるときに効果があります。
・DoCoMo及びJ-PHONE経由で携帯端末情報送信制御:selchk = n;
ここの値を 1 にすると、携帯端末情報を送信しない場合の投稿を拒否します。
書き込み停止機構:(stop_dorama = n;:stop_actor = n;:stop_actor_del = n;)
値を 1 にした場合、強制的に書き込めなくする事が出来ます。
特に出演者エディタは効果が期待できます。
補足
XHTML版のみの問題です。
サーバーによっては[dorama.cgi]がファイルと認識されてダウンロードされてしまう問題が発生しています。
この場合は、147・155・158・163行目の[text/html,application/xhtml+xml]の部分を、[text/html]とするようお願いします…
推測ですが、サーバー側でまだ対処されていないのかも知れません(XHTML関連が)…
もう一つは160行目の <?xml version=\"1.0\" encoding=\"$charset_code\"?> は、ブラウザによっては互換モードに変わってしまうので、削るか # を追加してください。
★免責事項
作者はこのスクリプトを使用した事によって発生したトラブル(データ破損等)の責任は負いません。
あらかじめご了承ください。
★利用規定
このスクリプトの利用規定はオリジナルの配付元であるCGI-StaTionでの利用規定に準じます。
さいごに…
自分で言うのも難なのですが、あまりの強力さにびっくりします。
特にしつこいイタズラ書き及び匿名投稿等に…
ですがあんまり使い過ぎないようにしてください…(^^;
なお、わからないことがある場合にいきなりメール送るのはできるだけやめてください(処理に困るので)。
それでは、あなたのホームページが楽しくなることを願ってます。
おまけ
CGIファイル[ 〜.cgi ]のアクセス権限を「700/705/755」(サーバーによって異なる)にして、
Perlパスのすぐ下に、
BEGIN { $| = 1; print "content-type: text/html,application/xhtml+xml\n\n"; open (STDERR, ">&STDOUT"); }
を挿入してアクセスすれば、エラー原因・ヒント(エラー行など)が表示されます。
ただし英語で表示されますので若干の語学力が要求されます…(^^;
記入例:
#!/usr/local/bin/perl(サーバーによって異なる)
BEGIN { $| = 1; print "content-type: text/html,application/xhtml+xml\n\n"; open (STDERR, ">&STDOUT"); }
content-type: text/x-hdml; charset="shift_jis\n\n";
(追加しても大丈夫なタグ)
<embed src="任意のパス" hidden="true" autostart="true" loop="true"></embed>
(WeB DoRaMa内でBGMを流したいときに追加してください)
<table align="center">
<tr><td align="center">
あらすじ
</td></tr>
<tr><td>
A行<br />
B行
</td></tr>
</table>
あらすじを使用したいときに追加してください、それと、A行とB行は例ですので削除してから文字を入力してください
(使用例)
<table align="center">
<tr><td align="center">
〜(サブタイトルでも構いません)〜
</td></tr>
<tr><td>
A行<br />
B行
</td></tr>
</table>
(はっきり言ってテキトーですが… 自分なりにあらすじを考えてくだされば結構です)
(二行を超える場合)
</td></tr>
</table>
(あらすじを使用したいときに追加してください、それと、A行とB行は例ですので削除してから文字を入力してください)
(使用例)
<table align="center">
<tr><td align="center">
〜(サブタイトルでも構いません)〜
</td></tr>
<tr><td>
A行<br />
B行<br />
C行以降
</td></tr>
</table>