• ベストアンサー

ID別にページを変更できるパスワード認証スクリプトを探しています

ID別にアクセスさせるページを変更できるようなパスワード認証スクリプトはないでしょうか? 具体的にはYahooメールみたいにログインすると各設定(メールやジオなど)がユーザー単位で変更される物です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taseki
  • ベストアンサー率66% (155/233)
回答No.7

配布されているスクリプトの脆弱性については、少なくとも具体的な方法は、このような場所に書かないほうが良いかと…。 たとえば、悪意のある者がこのページを見たら、すでにweb_editorを使っているサイトを攻撃できてしまいます。それも、かなり致命的なダメージを与えかねません。 そうでなくても、話題が外れてしまうので、とりあえず最初のご質問に関して解決したら、いちど締め切って新ためて別の話題として投稿してはどうでしょうか。 web_editorの使用に関して意見を申し上げれば、サイト内の全てのファイルを編集できてしまう、なんていうのは正直とんでもなく危険なシロモノです。 もしレンタルサーバー(共有サーバー)をお使いなら、それを使っているすべての人に迷惑をかける可能性もあります(相対パスで他サイトのファイルにアクセス)。 使わせるのが信頼できる限られたメンバーだとしても、だからこそ逆に、その人たちにとっても迷惑なのでは。 たとえて言えば、 「ここに爆弾のスイッチを置いておきますが、あなたを信頼してますから」 と言われるようなもので、それは信頼どうこうではないですよね。操作ミスということも大いにありえるわけですから。お互いリスクが大きすぎます。 ※あくまでも極端なたとえ話ですが

Intel_404
質問者

お礼

大変有難うございました。確かにtaseki様のおっしゃるとうりかもしれません。今後、しっかり検討したうえで行っていきたいと思います。

その他の回答 (6)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.6

web_editor のパスワード機能の削除については、カスタマイズすれば可能ですが、作者の許可なく公の場でそれを書くのは気が引けるので、以下の方法を紹介するにとどめます。 ●以下のような「パスワード付きのURL」に、各オーナーにアクセスしてもらうことで、パスワードの手入力を省略する方法 owner/web_editor.cgi?pass=owner ※パスワードを「owner」に設定しておく 蛇足ですが、というかこれも気が引けますが、今、web_editorを見ていて致命的なバグを発見してしまった…。パスワードを知らなくても編集できてしまいます…。 計らずも、BASIC認証を使われると言うことなので、この危険は回避できるとは思いますが、皮肉な結果というか…。 -------------------------- 「ブラウザ上で受信できるメールスクリプト」というのは、いわゆる「Webメール」のシステムですね。つまりブラウザ上でメールソフトの機能を実現するというものですよね。 そのご質問は、とりあえずこのスレッドを締め切って新しい質問として投稿したほうが良いと思います。 アプローチだけ書くと、お使いのWebサーバーがメールサーバーも兼ねているなら、スクリプトからスプール(メールボックス)にアクセスし、メールサーバーが別ならNet::POP3などを使用してスクリプトからメールサーバーにアクセスする、というような感じです。

Intel_404
質問者

補足

早速の回答有難うございます。なるほどowner/web_editor.cgi?pass=ownerというやり方でいけそうですね。有難うございます。 ところでweb_editorの脆弱性ですが私も発見しました。配布者にも問い合わせたのですが編集画面で ファイル名 にフルパスを入力すれば対象ディレクトリ以外も設置してあるサーバー内全てを書き換えることが可能です。どうやらこれらの脆弱性を直さないと第三者にも提供できる安全な物にはなりそうもないです。 しかし他の編集スクリプト(無料版)ではweb editor並みの機能を持った物がないので、ある意味これしか選択肢はないといえます。 PS:taseki様が発見なされた脆弱性とは一体どのような物でしょうか?

  • taseki
  • ベストアンサー率66% (155/233)
回答No.5

以下、整理して書きます。 ●まずindex.cgiが動作せずにソースが表示されてしまう件。 ためしに、Webprotectの影響を受けない場所に設置して、パーミッションを適切に設定すると、どうでしょうか? これで正常に動作する(BASIC認証のIDまたは何も表示されない)場合は、単にWebprotectを介してそのファイルを表示させているだけのように思います。 ●「Webprotectの認証後にindex.cgiを置き」とのことですが、あくまでもindex.cgiはBASIC認証のIDを見てジャンプさせるだけのものです。BASIC認証を使わずにWebprotectを使うと書かれていたので、矛盾しているような…? ちなみに、Webprotectは、そのシステムの中でログインを管理するもので、他スクリプトからIDなどを参照できるように作られていないと思います。少なくともカスタマイズが必要でしょう。 ●web_editor を見てみましたが、「他ディレクトリのファイルは対象にできない」とおっしゃっていましたが、$st_dirで指定できるように見えます。 以上を踏まえると、最も簡単で安全なのは、やはり単純にBASIC認証ではないでしょうか。 たとえば、あるファイルを一般閲覧者から編集できないようにするだけでなく、そのファイルのオーナー以外も編集できないようにする必要がありますよね? つまりTAROUでログオンした人がJIROUのファイルを編集できてしまっては困るわけですよね。 その制限の範囲設定が、Webprotect+web_editorでできるのかが、もちろん詳細に見たわけじゃないですが、ちょっと気になります。 単純なBASIC認証なら、強固と呼べるレベルかどうかは別として基本的にはファイルへのアクセスを制限できるのと、簡単にスクリプトからIDを参照できるので、たとえば以下のようなディレクトリ構成で設置すれば実現可能と思います。 ※ <D>はディレクトリ ┣ public_files <D> ┃ ┣ TAROU <D> ┃ ┃ ┣ page1.html ┃ ┃ ┗ page2.html ┃ ┣ JIROU <D> ┃ ┃ ┣ page1.html ┃ ┃ ┗ page2.html ┃ ┗ … <D> ┣ owner <D> ※BASIC認証でログオン ┃ ┣ .htaccess ┃ ┗ web_editor.cgi web_editor.cgi は1つだけ設置し、前述のindex.cgiのように$ENV{'REMOTE_USER'}を参照して$st_dirをセットするようにカスタマイズすれば簡単に実現できると思います。 例:web_editor.cgiの「設定部」に挿入(「$st_dir = ".";」は削除) ------------------------ if ($ENV{'REMOTE_USER'} eq 'TAROU') { $st_dir = '../public_files/TAROU'; } elsif ($ENV{'REMOTE_USER'} eq 'JIROU') { $st_dir = '../public_files/JIROU'; } else { # エラー処理 } ------------------------

Intel_404
質問者

お礼

taseki様には大変感謝しております。やはりセキュリティ上、BASIC認証にすることにいたしました。これから書いて頂きましたスクリプトをweb editor.cgiに組み合わせ実験させていただきたいと思っております。又、結果は今日又は明日ごろにご報告させていただきます。今回は誠に有難うございました。 PS:ずうずうしくて大変申し訳ないのですが、ブラウザ上で受信できるメールスクリプトというものはご存じないでしょうか?送信のみのタイプは多いのですが受信できる物は見たことがありません。私の考えではログインされる方にメールアドレスを発行しWeb上で受送信していただければと考えております。(php , cgi , ssiなどの言語に対応しているサーバーを使用していますのでCGIに限った物ではありません。)

Intel_404
質問者

補足

有難うございました。成功です!!しかし web editor.cgiのパスワード機能が備わっている為2回もログインしなければなりません。したがってweb editorのパスワードブロック機能を排除したいのですがどこを削ればよろしいでしょうか。ちなみに $passwd = ""; と記載した場合、動きませんでした。 よろしくお願いいたします。

  • taseki
  • ベストアンサー率66% (155/233)
回答No.4

すみません、おっしゃっている意味がちょっとよく解らなかったのですが、 ●「クッキーでの認証のため先ほどいただいたBASIC認証とにたID認識スクリプト」とは、具体的にどういうものですか? ●「BASIC認証で使用したスクリプトではWebprotectでは動きませんでした」とは、どういうことをして、どういう結果になったという意味ですか?特に「BASIC認証で使用したスクリプト」とは何ですか? ------------------------------ SSIの件、誤解されているようですので、あらためてご説明します。 ●ANo.1 で紹介したスクリプト例は、SSIではなく通常のCGIスクリプトです(ファイル名:index.cgi)。 <!--#exec cmd="index.cgi"-->などで使えません。 動作は、これにアクセス(SSIではなく直接アクセス)すると、BASIC認証のIDが「TAROU」だったら「tarou_page.html」にジャンプさせる…というようにIDによってページを遷移させる、というだけのものです。 ●ANo.2 で紹介したスクリプト例は、SSIによってHTMLファイルに埋め込むためのスクリプトです(ファイル名:user.cgi)。 動作は、その埋め込んだ位置にBASIC認証のIDが表示される、というものです(ようこそTAROUさん、のように)。 で、そのSSIの記述方についてですが、結果報告を見る限り、 <!--#exec cgi="user.cgi" --> で良いようです。 「無限ループ状態になり」ということですが、おそらく無限ループではなく、単に BASIC認証を設定していない→表示するものがない→止まっているように見える だけなのではないですか?

Intel_404
質問者

お礼

大変申し訳ございません。付け加えです:エディタスクリプトはhttp://cgiscriptmarket.com/script.htmlの web_editor を使用する予定です。

Intel_404
質問者

補足

大変もうしわけございません。勘違いのようでした。早速 user.cgi を設置したところID名が表示されました。 クッキーでの認証のため先ほどいただいたBASIC認証とにたID認識スクリプト とはindex.cgiのことになります。私、恥ずかしい事ながらCGIには全くの無知でWebprotectの認証後にindex.cgiを置きましたら作動せずindex.cgiのソースがブラウザに表示されました。(無論CGIなのでパーミッションも755に設定いたしました。)従ってWebprotectでアクセスした後、IDを認証し各  ページへ誘導するスクリプトをただ今探しているところです。 どうぞよろしくお願いいたします。

  • taseki
  • ベストアンサー率66% (155/233)
回答No.3

なるほど、制限をかけたいファイルと一般公開するファイルが同じディレクトリにある、ということですね。 素朴な疑問ですが、その編集スクリプトは、なぜ同ディレクトリ内のファイルしか対象に出来ないのですか?単に、ファイル指定の部分で、たとえば相対パスなどを使ってディレクトリを含めて指定するだけな気がするのですが…。 SSIのエラーの件、そのエラーメッセージは「エラーが発生した」という意味しかないので、以下を確認してみてください。 1.SSIではなく直接 user.cgi にブラウザでアクセスしてみてください。 2.上記1でエラー(500 Internal Server Errorなど)が表示されるなら、スクリプトの方に問題があります。しかしこれだけ短いスクリプトだと怪しいのは ●行頭の #!/usr/bin/perl が、お使いのサーバーのperlへのパスになっていない ●単純な記述ミス(スペルなど) ぐらいしか考えられません。 3.上記1でエラーは表示されず、BASIC認証のIDまたは何も表示されない場合は、スクリプトではなくSSIのほうに問題があります。たとえば ●SSIファイル(「<!--#include ~」を記述したHTMLファイル)と user.cgi が同じディレクトリにありますか? ●<!--#include file="user.cgi"--> の部分の書き方は、先にもお知らせしたようにEXECが使えない環境での書き方ですが、お使いの環境によって指定方法が異なるかもしれません。別の書き方としては、 ------------------------ <!--#include virtual="/user/user.cgi" --> ※「/user/user.cgi」の部分は、スクリプトのURLが「http://www.hogehoge.com/user/user.cgi 」の場合 ------------------------ <!--#exec cgi="user.cgi" --> ------------------------ などがありますが、このへん、環境によっていろいろです。

Intel_404
質問者

お礼

taseki様の好意には大変感謝しております。先ほどの付け加えです:<!--#exec cgi="user.cgi" -->と表示すると無限ループ状態になり<!--#include virtual="/user/user.cgi" -->ではエラーでした。

Intel_404
質問者

補足

即急な返答有難うございます。 >単に、ファイル指定の部分で、たとえば相対パスなどを使ってディレクトリを含めて指定するだけな気がするのですが…。 私が使用しているスクリプトでは指定できない為です。 ・Webprotect 今回BASIC認証は使えそうに無いのでWebprotectに成ると思います。KENTWEBさんをご覧いただいたようにクッキーでの認証のため先ほどいただいたBASIC認証とにたID認識スクリプトを作成するとどのようになりますでしょうか? ちなみにBASIC認証で使用したスクリプトではWebprotectでは動きませんでした。 ・SSIの件で再度ご報告させていただきます。 <!--#exec cmd="index.cgi"-->で指定すると Location/ hogehoge.html と表示されますがユーザー名は表示されません。 <!--#exec cmd="index.cgi"-->では全てエラーになってしまいます。 どうぞよろしくお願いいたします。

  • taseki
  • ベストアンサー率66% (155/233)
回答No.2

Webprotect をざっと見た限りでは、改良などせずにそのまま使えるのでは? まさにIntel_404さんの要件どおりのことを実現するように見えます。 紹介したBASIC認証を使ったスクリプト例と同じ結果になります。 ただ、もし差し支えなければ、BASIC認証を避ける理由はなんですか? 環境変数から参照できるなど、いろいろ利点もありますよ。たとえば認証後のページ、11-webeditor.cgi などからユーザーを特定できたり、…というよりも、ご予定ではユーザー別に編集ページをそれぞれ用意するようですが、特に理由がなければ、ユーザーを判別できれば1つの編集ページで良いわけです。一般的にもそうです。 > のuser.cgiとは何でしょうか? まさしくこれも、あくまでも例として、BASIC認証でユーザーを判別するものを想定したものです。 たとえば「user.cgi」という名前で以下のようなスクリプトを置いておけば、「ようこそTAROUさん!」などと表示されます。 --------------------- #!/usr/bin/perl print "Content-type: text/plain\n\n"; print $ENV{'REMOTE_USER'}; --------------------- あくまでも簡単な例です。

Intel_404
質問者

お礼

お忙しい中、taseki様のご協力には大変感謝しております。

Intel_404
質問者

補足

再度ご回答誠に有難うございます。 一応実験させていただきましたが何の問題も無く動きます。しかしBASIC認証ではいけないという理由にBasci認証の置いてあるディレクトリ全てにブロックがかかってしまう為です。 例えばウェブエディタのCGIスクリプトを hogehoge.co/user/ に設置したことにします。そのスクリプトは user/ 内のファイルなら編集できますが user/外だと編集は出来ません。(つまり同ディレクトリ内のみ)そのため user/ にBASIC認証をかけてしまうとウェブ編集スクリプトだけではなく一般公開するページまでもがブロックされてしまう為です。 ところでご投稿いただきましたuser.cgiですが私のサイトでもしっかり起動しID別にページを変ることが出来ましたが、SSIがようこそ! [an error occurred while processing this directive] さん!と表示されうまくいきません。 どうぞよろしくお願いいたします。

  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

スクリプトを探していると言うことなので回答にはならないと思いますが、 やりたいことがもう少し具体的だと助かるのですが、 単にユーザーごとに別ページにジャンプさせるだけなら、BASIC認証を設定しておいて、以下のスクリプトを置いておくだけです。 --------------------- #!/usr/bin/perl if ($ENV{'REMOTE_USER'} eq 'TAROU') { print "Location: /tarou_page.html\n\n"; } elsif ($ENV{'REMOTE_USER'} eq 'JIROU') { print "Location: /jirou_page.html\n\n"; } elsif ($ENV{'REMOTE_USER'} eq 'SABUROU') { print "Location: /saburou_page.html\n\n"; } --------------------- ※index.cgiなどデフォルト表示されるファイル名で保存する ジャンプさせるのではなく、それこそYahooメールのようにログオンしたユーザー別に「受信トレイ」だとか他の機能や情報を表示…、というのなら、それはその内容自体がメインであり、「ID別にページを…」というレベルの話ではなくなります。 あるいは、たとえばページの上部に「ようこそ●●さん!」などと表示させるなら、SSIが使えれば上記スクリプトの応用で、HTMLの中に以下のように書けば可能です。 --------------------- <html> … <body> ようこそ! <!--#include file="user.cgi"--> さん! … --------------------- ※EXECが使えない場合

Intel_404
質問者

補足

返答有難うございます。ウェブページを運営しているのですがサポーターの方にも編集できるようエディタを設置しようと考えています。従い各サポーターさんによって編集ページも違ってくるわけでAさんは11-webeditor.cgiへログイン、Bさんは12-webeditor.cgiへログインといった感じです。しかしログインシステムを各サポーターさんに一つずつ作るわけにも行かないので一つのシステムでID別にアクセスさせるページを切り替えたいと思ってます。しかしBASIC認証を使うのは避けたいと考えてます。私の考えではKENTWEBさんのWebprotect (http://www.kent-web.com/pwd/protect.html)を改良したいと思っています。 ところで返答いただきましたSSIですが --------------------- <html> … <body> ようこそ! <!--#include file="user.cgi"--> さん! … --------------------- のuser.cgiとは何でしょうか? どうぞよろしくお願いいたします。

関連するQ&A