■Ruby-Chat(Character Version)設置方法

 ここでは、るび〜の作成したRuby-Chat(Character Version)を配布/説明するページです。
 2003年05月17日現在のRuby-Chat(Character Version)(rchat_char.cgi)バージョンはVer1.13です。
 zip形式の物がありますので、こちらから一式ダウンロードできます。。解凍には「+Lhaca」等の圧縮解凍用ソフトを使う事をお勧めします。ソフトは、窓の杜とかvector等で手に入れることができます。


■説明

 チャットでは、色々なみんなの意見を書き込めるとても便利なものです。ただ、その管理はとても難しいものとなっています。実際に不正な書き込み・悪戯・大量な書きこみをされるときもある等、とても大変なものとなっています。しかし、このRuby-Chat(Character Version)では、それらを防ぐとともに管理しやすいように設計しました。

■機能

機能
機能名説明
クッキー機能書き込みした人に関しては、次回からNAME・E-MAIL・文字色を毎回書きこまなくて済むようになります。
在室者表示機能現在チャットルームに在室している参加者/参加人数を表示します。
アドレス自動リンク機能コメント欄に書き込んだURLを自動リンクします。
キャラクタ表示機能キャラクタを選び、表示します。
スタイルシートデザイン機能スタイルシートを外部ファイルとして持つことで簡単にデザインを修正することが出来ます。

■セキュリティ

セキュリティ
機能名説明
ファイルロック機能同時書き込みなどによるログファイルの破損防止機能。
書込文字数制限機能名前・メールアドレス・タイトル名等で入力できる文字数を制限することができます。これにより大量の書込みによる荒らしを排除します。
他サイトからの書込・呼出排除機能掲示板と全く同じ投稿フォームを作っても、掲示板以外からの書き込みが出来ません。掲示板を勝手に呼び出すこともできません。他の掲示板を踏み台にした、IMGタグを使った荒らしも排除します。
書込データ量制限機能指定バイト数以上の書込みが出来ない様にします。これにより大量の書込みによる荒らしを排除します。
タグ排除機能タグを使用を排除しています。自動的に変換します。
アクセスログ取得機能REMOTE_HOST/REMOTE_ADDR/HTTP_USER_AGENTをログとして、ファイルに保存します。これにより、誰が書き込んだかを確認することができます。荒らしにあった時にログとして追跡できます。
プロキシチェック機能プロキシ経由であるかをチェックし、オプションで閲覧・書き込みを出来なくすることが出来ます。
指定ホスト排除機能指定したホストからのアクセスを拒否します。荒らしにあった場合に、荒らしのホスト名を設定すれば被害を抑えることが出来ます。
ログデータ量制限機能指定のバイト数を超えると自動的にログ件数の半分を削除します。これによりログのデータサイズの巨大化を防ぐことが出来ます。
2重投稿拒否ブラウザの更新により発生する同一コメントの書き込みを防ぐことができます。

■設置場所

Ruby-Chat(Character Version)を設置するために以下の場所に設置します。
  • ホームディレクトリ/cgi-bin/rchat_char.cgi
    Ruby-Chat(Character Version)の主な機能となります。本ファイルを修正することで、様々な設定を変更することが出来ます。詳細は初期値に記載してあります。

  • ホームディレクトリ/cgi-bin/lib/jcode.pl
    漢字コード変換ライブラリとなります。

  • ホームディレクトリ/cgi-bin/lib/ruby.pl
    共通関数部分となります。ユーザの皆さんはこのファイルを触らないで下さいね。

  • ホームディレクトリ/cgi-bin/log/rchat_char.dat
    ログファイルです。このファイルに書込み内容が書かれます。このファイルは訪問者に分からないようにファイル名を変更して下さい。セキュリティ上の問題がありますから・・・

  • ホームディレクトリ/cgi-bin/log/rchat_char.dpos
    2重投稿チェックファイルです。このユニークなコードが記録され、2重投稿をチェックする内容が書かれます。

  • ホームディレクトリ/cgi-bin/log/rchat_char.men(空ファイル)
    メンバーログファイルです。現在参加している訪問者の名前と時間を記録を保持することで参加者がいることがわかります。

  • ホームディレクトリ/cgi-bin/log/rchat_char.loc(空ファイル)
    チャットにアクセスしている際のロックディレクトリとなります。多重にアクセスされてしまった際にファイルが消失しないためのセキュリティ対応となっています。

  • ホームディレクトリ/cgi-bin/image/background.gif
    背景画像ファイルとなります。

  • ホームディレクトリ/cgi-bin/image/キャラクタ画像.gif
    キャラクタ画像ファイルとなります。

  • ホームディレクトリ/cgi-bin/css/rchat_char.css
    外部スタイルシートファイルとなります。このファイルを修正することで簡単にデザインを変更することが出来ます。他のデザインにしたい方のために複数のスタイルシートファイルを用意しています。


■パーミッション

 UNIX系のサーバーならば、パーミッションを設定しなければいけません。以下に個々のファイルについてのパーミッションを設定して下さい。

ファイル名パーミッション(rwx)
rchat_char.cgi777 (755 or 700)
jcode.pl644 (604 or 600)
ruby.pl644 (604 or 600)
rchat_char.dat666 (600)
rchat_char.dpos666 (600)
rchat_char.men666 (600)
background.gif644 (604 or 600)
キャラクタ画像.gif644 (604 or 600)
rchat_char.css644 (604 or 600)


 括弧「( )」で表されているパーミッションは、よりセキュリティ面において安心な値となっています。括弧で表されている値でCGIが動作する場合は、それが一番良いです。
 尚、パーミッションは不適切な値を設定するとセキュリティ面に悪影響が出ます。適切なパーミッションを設定しましょう。
 ファイルをアップしているサーバーが、どの権限(owner/group/user)でCGIを動かしているのかを確認してみてください。

■初期値

  1. アドレス・パス名設定
    アドレス・パス名等を設定します。

    • $cgifile = "rchat_char.cgi";」は、本ファイル名となります。
    • $chatfile = "log/rchat_char.dat";」は、ログファイルとなります。
    • $dpostfile = "log/rchat_char.dpos";」は、2重投稿チェック用ファイルとなります。
    • $menberfile = "log/rchat_char.men";」は、メンバーログファイルとなります。
    • $lockdir = "log/rchat_char.loc";」は、ロックディレクトリとなります。
    • $cssfile = "css/rchat_char.css";」は、スタイルシートのファイルとなります。
    • $imagedir = "image/";」は、画像のあるディレクトリとなります。相対パスでも絶対パスでも構いませんが必ず最後は、バックスラッシュ( / )で閉じてください。
    • $homeaddr = "http://www5e.biglobe.ne.jp/~access_r/";」は、戻り先のアドレスを設定して下さい。相対パスでも絶対パスでも構いません。


  2. タイトル設定
    <TITLE>タグのタイトル名と一番上に表示されるタイトル名を設定します。

    • $title = "Ruby-Chat(Character Version)";」はタイトル名です。


  3. GET or POSTの設定
    メソッドを設定します。ただし、GET書き込みを防ぐために必ずPOSTにした方がセキュリティ上良いです。

    • $methodは、メソッドを設定します。
      「"POST"」の場合は、POST指定となります。通常はこちらを選択して下さい。
      「"GET"」の場合は、GET指定となります。


  4. 参加者へのコメント設定
    参加者へのコメントを設定します。

    • $master_name」は、コメントするMASTERの名前となります。入退室時にコメントします。
    • $in_message = "NAMEさんが入室されました。";」は、入室時のコメントとなります。NAMEの部分が参加者の名前となります。
    • $out_message = "NAMEさんが退室されました。";」は、退室時のコメントとなります。NAMEの部分が参加者の名前となります。


  5. 書き込み文字色設定
    書き込み時の文字色を設定します。

    • @snamecolor =
      ("黒色","灰色","マロン色","紫色","緑色","オリーブ色","紺色","暗い水色",
      "銀色","白色","赤色","明るい紫色","ライム色","黄色","青色","水色");

      に色を設定するとその数分フォームに選択文字色名が増えます。@scolorと対応した名前を設定して下さい。
    • @rcolor =
      ("black","gray","maroon","purple","green","olive","navy","teal",
      "silver","white","red","fuchsia","lime","yellow","blue","aqua");

      に色を設定するとその数分フォームに書き込み文字色が増えます。@snamecolorと対応した名前を設定して下さい。
    • $dcolor = "black"」は、基本となる書き込み時の文字色となります。文字色は「@rcolor」に設定されたものの内から選んで設定して下さい。


  6. キャラクタ設定
    書き込み時のキャラクタを設定します。

    • @charname =
      ("ケロンパ", "サル", "クマ", "ウシ", "ネコ", "パンダ", "ペンギン", "ピヨ", "イヌ", "ライオン", "ウザギ");

      で設定されているものは、オプションでセレクトする時の表示名と設定となります。この配列に追加すれば、オプションにキャラクタ名が追加されます。
    • @charimage =
      ("k_kero00.gif", "k_kiki00.gif", "k_kumao00.gif", "k_moo00.gif",
      "k_nyao00.gif", "k_pan00.gif", "k_penpen00.gif", "k_piyo00.gif",
      "k_poti00.gif", "k_reon00.gif", "k_usa00.gif");

      で設定されているものは、書き込み時に表示する画像のファイル名となります。@charnameで指定した表示名と@charimageで指定した画像ファイル名は必ずペアして下さい。
    • $widthは、キャラクタを表示する際の横幅となります。
    • $heightは、キャラクタを表示する際の縦幅となります。


  7. 自動リンク設定
    自動リンクするかを設定します。「http://yahoo.co.jp/」と入力すると掲示板で表示する場合には自動的に「http://yahoo.co.jp/」というように自動的にリンクしてくれます。ただし、タグ許可モードとなっている場合は、自動リンク設定はONとしていてもOFFとなります。

    • $autolinkは、自動リンクON/OFF設定です。
      「0」の場合は、自動リンクOFF。
      「1」の場合は、自動リンクON。


  8. アドレスチェック設定
    自分のホームページ以外からの不正な呼び出しを防ぐためのアドレスを設定します。自分のホームページの自分のホームまでのアドレスを設定して下さい。
    例えば、http://www5e.biglobe.ne.jp/~access_r/cgi-bin/rb_light.cgiで呼び出すとすれば、http://www5e.biglobe.ne.jp/~access_r/まで指定すれば問題無いでしょう。

    • $baseurl = "http://www5e.biglobe.ne.jp/~access_r/";」は、アドレスとなります。


  9. 画面最大表示件数設定
    画面上でログを何件出力するかを設定します。あまり多くしすぎると重くなります。

    • $max = 20;」は、画面にチャットログを何件表示かを指定します。「$max = 0;」とすると、画面の表示件数に制限が無くなります。


  10. 在室時間設定
    チャット参加者が、書き込みやアクセスが無かった場合に、在室者から排除するための待ち時間を設定します。

    • $staytime = 300;」は、在室者を排除する時間(秒)です。


  11. POST時のMAXデータサイズ設定
    $method = "POST"とした場合に書込みされる際のMAXデータサイズを設定します。大量の書き込みを防ぐためにあまり大きな値にしないで下さい。

    • $postsize = 25600;」は、「$method = "POST"」指定時のMAXデータサイズです。


  12. タグチェック設定
    タグ使用を許可/不許可を設定します。基本的にタグ使用は不許可にするほうがセキュリティ上良いと思います。

    • $tagcheckは、タグ使用を許可/不許可するモードです。
      「0」の場合は、タグ許可。
      「1」の場合は、タグ不許可。


  13. アクセスログ取得設定
    アクセスログ関連の情報取得・プロキシチェックを設定します。書き込み時にアクセスログ情報を載せる際の設定です。アクセスログは荒らしにあった場合に証拠となりますので、取ったほうが良いです。

    • $accesslogは、アクセスログを取得ON/OFFの設定です。書き込み時にログを記録するか否かを設定します。
      「0」の場合は、アクセスログ取得OFF。
      「1」の場合は、アクセスログ取得ON。

    • $securityは、プロキシ経由でのアクセスした際に本来のIPアドレスが取得できない場合に、本来のIPアドレスを取得するかをON/OFFする設定です。ただし、確実に本来のIPアドレスが取得できるとは限りません。
      「0」の場合は、通常のREMOTE_ADDR/REMOTE_HOSTを取得します。
      「1」の場合は、漏れ串であった場合に本来のIPアドレス/ホスト名を取得します。


  14. プロキシチェック設定
    プロキシ経由のユーザを閲覧・書き込みを許可・不許可を設定します。プロキシを経由するユーザは何かしら身元を隠すような行動をする可能性が有るためです。ただし、プロキシを通さなければいけない方(会社・学校等)もいますので用途に応じて設定するとよいでしょう。

    • $proxycheckは、プロキシ経由ユーザの場合、閲覧・書き込みを許可 or 不許可にするかを設定します。
      「0」の場合は、閲覧OK・書き込みOK。
      「1」の場合は、閲覧OK・書き込みNG。
      「2」の場合は、閲覧NG・書き込みNG。

    • $proxycheckを1 or 2で設定した場合にチェックするプロキシレベルです。
      「1」の場合は、漏れ串であった場合は通します。(本来のIPアドレスか取得できるため)
      「2」の場合は、プロキシを使用していた場合は、容赦なくエラーとします。

    • $proxycheckを1 or 2で設定した場合に許可する善意のアクセス者を設定します。
      $proxysafe = "www.yahoo.co.jp|www.goo.ne.jp";」は、プロキシ制限した場合に許可するホスト名を設定します。ホスト名を複数指定する場合は、|で区切って下さい。ちなみにホスト名は適当なものを設定しています。あくまで例です。


  15. ホストチェック設定
    アクセス制限をかけるホスト名を設定します。アクセスログを参照し荒らしのホスト名を設定するとページを閲覧・書き込みが出来なくなります。

    • @deny = ("www.hoge.hoge");」は、アクセス制限したいホスト名です。複数指定することが出来ます。その時はカンマ( , )で区切って下さい。


  16. 文字数制限設定
    名前・タイトル名・メールの長さ制限を設定します。大量に書き込みによりレイアウト崩れを防ぐことが出来ます。指定文字数を超えるとエラーを返します。

    • $name_len = 20;」は、全角で「お名前」の文字数が20文字以上。
    • $title_len = 40;」は、全角で「タイトル名」の文字数が40文字以上。
    • $mail_len = 100;」は、半角で「E-Mail」の文字数が100文字以上。


  17. ログデータ量制限設定
    $logdatasize = 1000000;」は、ログデータ量制限バイト数です。「$logdatasize = 100000」ならば、100Kバイトまで情報を保持します。

■注意点

  1. ロックファイルについて
     サーバーがダウンした場合等に、ロックファイルが残ってしまう場合があります。その場合には、「rchat_char.loc」というディレクトリが残っているようでしたら手動で削除して下さい。

■修正履歴

  • 2002/06/25 Ver1.01:初版。
  • 2002/07/20 Ver1.02:セキュリティ強化のためプロキシチェック追加。
  • 2002/07/22 Ver1.03:数々の処理見直し。
  • 2002/07/25 Ver1.04:変数の初期化ミスの修正。
  • 2002/07/28 Ver1.05:大部分の処理修正。
  • 2002/11/19 Ver1.06:ruby.plのデコード処理ミスがあったため修正。
  • 2003/04/25 Ver1.07:処理の高速化のための修正。
  • 2003/04/25 Ver1.08:デザインを修正。
  • 2003/05/10 Ver1.09:処理高速化のため修正。
  • 2003/05/10 Ver1.10:入退室時のコメントを追加。
  • 2003/05/17 Ver1.11:参加者数と参加者表示機能を追加。
  • 2003/05/17 Ver1.12:ファイルロック位置移動。
  • 2003/05/17 Ver1.13:スタイルシートを外部ファイルに持つよう修正。

■動作しない場合は・・・

  1. 1行目のperlのパスがおかしい
    「#!/usr/local/bin/perl」は、サーバーの環境に合っていないかもしれませんので、契約しているところの環境に合わせましょう。

  2. http://〜で始まるアドレスでアクセスしていない
    file://〜 や C:\ で始まる名前でアクセスした場合は動作しません。きちんとhttp://から始まるアドレスで設定しましょう。

  3. CGIをサポートしていない
    実は自作CGIが駄目だったり、CGI自体の動作を許可していないサーバーの可能性がありませんか?そんな時は当然ながら動作しません。

  4. パーミッションがおかしい
    パーミッションは適切な値となっていますか?telnetで入って確認/変更するか、FTPソフトでもパーミッションを確認/変更することが出来ます。

  5. 転送モードがおかしい
    転送モードは、アスキーモードになっていますか?バイナリモードではないですよね?FTPソフトでオプションを確認しましょう。

  6. 現在アクセスが集中しております。少々お待ちになってから再度アクセスをお願い致します・・・
    「現在アクセスが集中しております。少々お待ちになってから再度アクセスをお願い致します。」というメッセージが出る場合があります。これは、ファイルロックを行っている時に発生しています。これは、各ファイルの書き込み中に同時アクセスされることを防ぐために発生します。

■プロバイダー別CGI調査表

 あなたが契約しているプロバイダーが、CGIの設置を許可していないことには、当然ながらCGIを動作させることが出来ません。プロバイダーが用意しているカウンターやBBS等のCGIのみが使える環境では、Webで配布されているCGIの設置は出来ないことがあります。当サイトでは確認しておりませんが、以下のサイトにて自作のCGIスクリプト(Perl)を設置できるプロバイダ等についての情報を載せています。是非参考になされてはいかがでしょうか?



Webマスター、HP作成のプロとして活躍したい方は見てください。
ホームページの開設数が増加し、Web業界や一般企業でWebマスターが急激に求められています。Webマスターの絶対数の不足している今が、技能習得の絶好のチャンスです。
Copyright © 2000-2003 ACCESS R All rights reserved. Presented by Ruby