Perlプログラムでパスワードをif文で比較する方法
- Perlプログラムでホームページにパスワード入力を実装する際の方法について教えてください。
- Perlプログラムの中でif文を使って入力されたパスワードを比較する方法について教えてください。
- 一目瞭然で判るようなパスワード比較の方法を避けるためにはどうすれば良いですか?
- ベストアンサー
Perlプログラムにおいて、入力されたパスワードをif文で比較させたい
Perlプログラムにおいて、入力されたパスワードをif文で比較させたい。 今、Perlプログラムを使ってホームページでクイズを作成中です。 そこで、教えて頂きたいのですが、ホームページに入れる人は、事前に通知した人にのみで、パスワード入力をしてもらう方式にしたいと思っています。 パスワードも一人一人に違うものではなく、3種類程度を考えています。 Perlプログラムの中に if ($passwd eq '1234') 程度に考えています。 でも、Perlプログラムソースを見られたら一目瞭然で判ってしまいます。 プロバイダはniftyで、index.cgiのファイル名にします。 基本的な質問で恐縮ですが、もっと良い方法、注意しないといけない点、などを教えて下さい。
- yama-6999
- お礼率66% (6/9)
- Perl
- 回答数4
- ありがとう数10
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まず基本的な理解として perlファイルはApacheやIISなどのHTTPサーバーソフトによって ActivePerl等に送られインタプリタ処理されます。 つまりすべてサーバー上での処理になりますので perlのプログラムソースを見られる危険性はありません。 あくまでHTMLがクイズをしている人に戻るだけなのです。 パスワードの方法としてはHTTPリクエスト等の 機能を使う方法がありますが、別途知識が必要です。 まとめると いま質問主様が行っている方法で十分だと思います。 ただしブラウザからどの文字コードで文字が送られてくるか わからないので、一応文字コードは統一しておくべきでしょう。
その他の回答 (3)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
Perlスクリプトは実行ファイルなので、その内容を利用者が読むことはできません。 ただ、パスワードを別ファイルにテキスト形式で保存してしまうと、それは読まれる可能性があります。 そこで、サーバーが持つパスワード生成コマンド(cript)などを使って、暗号化した状態で保存します。 ユーザーが登録すると、ユーザー名、IPアドレス、パスワード再発行用質問と答え、パスワードを簡単なデータベース(必要なものはcriptなどで暗号化)として保存しておき、ログインのときに認証する。その後はCookieを使ってログイン状態を保存しておく。 という手法をとるのが一般的です。 掲示板などのCGIを探せば、ほとんどのものについているのでそれを流用するのが良いでしょう。
![yama-6999](https://gazo.okwave.jp/okwave/images/contents/av_nophoto_60_2.gif)
お礼
ご親切な回答を頂き、ありがとうございました。 頂いた「cript」方式は、もう少し高等なプログラムを作ったときに使わせて頂きます。今回は「if文」で対応することにします。 ありがとうございました。
- kakuritsu
- ベストアンサー率23% (62/261)
BASIC認証が使えるサーバであれば それを使えばよいでしょう。 ○基本認証でアクセス制限をかける方法 http://allabout.co.jp/internet/hpcreate/closeup/CU20020910A/
![yama-6999](https://gazo.okwave.jp/okwave/images/contents/av_nophoto_60_2.gif)
お礼
回答を頂き、ありがとうございました。 頂いた「基本認証」方式は私には少々重いので、先ずは「if文」で対応することにしました。 ありがとうございました。
- osamuy
- ベストアンサー率42% (1231/2878)
![yama-6999](https://gazo.okwave.jp/okwave/images/contents/av_nophoto_60_2.gif)
お礼
回答を頂き、ありがとうございました。 先ずは「if文」で対応することにしました。 ありがとうございました。
関連するQ&A
- PerlでUNIXのコマンドとパスワード入力
ブラウザでユーザー名とパスワードを入力して passwdコマンドでパスワードを変更するプログラムを作っています。 プログラム中で $result=system("passwd $user"); と実行すると、マシンは New UNIX password: の状態になって、パスワードの入力を待っていると思うのですが、 この状態でどうやってパスワード$passをマシンに送ったらいいのか わかりません。キーボードから読み取るのではなく、 プログラムですぐにパスワードを送りたいのです。 標準入力にフラッシュする?というのでしょうか。 system($pass); としてもうまくいきません。 OSはFedoraCoreで、スクリプトはルート権限で動いています。 どうかご教示ください。
- 締切済み
- Perl
- .htaccessで入力したIDをPERLのプログラムで使いたい
こんにちわ。perlに詳しい人に質問です。 タイトル通りの内容なのですが、 .htaccess認証でIDとパスワードをしてもらい、ログインする形式なのですが その後もそのIDとパスワードを使用していきたいんです。1度入力した内容を 再び入力するのは面倒でしょうし。 どうにか、.htaccess認証で入力したIDとパスワードを変数として perlのCGIプログラムに渡すことは可能でしょうか? 分かる方、ヒントだけでもくれたら嬉しいです。お願いします。
- ベストアンサー
- Perl
- Linux での暗号化の方法
ホームページにおいて、特定のユーザーしかアクセスできないようなページを作るために、パスワードによる認証を行おうと考えています。 perl による cgi を使う予定なのですが、プログラム中に if ($passwd ne "Test") {~~} などと書いたら、プログラムを見れる立場にある人間がみたら一目瞭然でパスワードを知られてしまいます。 そこでお聞きしたいのですが unix の /etc/passwd は暗号化されていて、ユーザーがそれを見ても簡単には解読できないと思います。perl の cgi から、同レベルに暗号化および認証することは可能ですか? 可能だとしたら、そのための方法などを教えてください(たとえば、それを行う便利なシステムコマンドや、フリーウェアがあるなど)。 ついでに、向学のためのウンチクとして、unix のパスワードの仕組みなどもお聞きできるとうれしいです(たしか、/etc/passwd からは絶対にデコードできないと聞いたことがあるのですが)。 よろしくお願いします。
- ベストアンサー
- ネットワーク
- PerlのIF文について
PerlのIF文の判断式につきまして、式全体を変数にしたいのですが、うまくできません。 初歩的な質問で大変恐縮ですが、他の言語を使っている人に聞いてもできるということなので、Perlでもできるような気がするのですが、うまく動かないので教えていただけませんでしょうか。 $ifbun="index(文字列, 検索したい単語) >=0"; if($ifbun){ 処理 } とっても簡単な式なのですが、このままですと条件式を加味しない処理結果になっています。 $ifbunの中身をそのままIFの条件式に入れると問題なく条件式どおりの結果が得られるので、プログラムは間違っていないと思うのですが、変数に入れると、条件を加味していない結果が出てきます。 どなたかお分かりの方がいらっしゃいましたら教えてください。 どうぞよろしくお願いいたします。
- ベストアンサー
- Perl
- IF文でページ振り分けがうまく出来てない。
CGI勉強中です。 ある掲示板CGIを改造して会員のみに使用可にしようと考えています。パスワード自体は無事組み込むことが出来たのですが、1つ問題が出ました。 掲示板なので、過去ログがありますよね。その過去ログページを表示しようとするとまた認証ページに戻ってしまい、パスワードを再度入力→最新10件のページに戻ってしまいます。どうにかして、1度入ったらパスワードを入力しなくてもいいようにしたいのですが… 今のところこうなってます。 /////////////// if ($pass_mode == '1'){ ←もしパスを使用するだったら if ($F{'mode'} eq '') { &pass_mode} ←モード無しの場合、パス入力画面に移動 if ($F{'mode'} eq 'admin') { &admin} ←モードアドミニならsub adminへ } else{ if ($F{'mode'} eq '') { &main_form} ←メイン書き込みページへ else { &{$F{'mode'}} } } /////// となっています。 また、過去ページへの移動は「**.cgi?pg=10&sort=」という感じです。 この状態で、ページ移動時にパス入力ページに移動しないようにするにはどうしたらいいでしょうか?cookieを使う必要があったりしますか? 抜けてる情報・足りない情報があったら指摘してください。すぐ補足します。言語はperlで書いています。 よろしくお願いします。
- ベストアンサー
- CGI
- 以下のperlのプログラムについて教えて下さい。
次のプログラムは”多くのファイルの名前を一度に変更する”です。 (参考書から持ってきました) perlの初心者、というよりパソコンの初心者で参考書等で調べても わからないことが多く困っています。 #! /usr/bin/perl $op = shift or die"Usage: rename expr [files]\n"; chomp(@ARGV = <STDIN>) unless @ARGV; for (@ARGV) { $was = $_; eval $op; die $@ if $@; rename($was,$_) unless $was eq $_; } 質問 1. opは何ですか? 2. Usageは何ですか? 3. exprは何ですか? 4. ARGVは何ですか? 5. evalは何ですか? 6. wasは何ですか? 7. eqは何ですか? 8. このプログラムにおいてファイルは どこのディレクトリでもリネーム出来るのでしょうか? 9. 出来ればプログラムの一行一行について説明をして下さい。 勉強不足で申し訳ありませんが、急ぎで知りたいので 宜しくお願い致します。
- ベストアンサー
- Perl
- WebPageでパスワード入力ページ作れるか
ホームページビルダー11で、Webpageを公開しています。中のpageでクイズのPageがあるのですが、 そのPageの下の方に「答え」があるようにしています。しかし、すぐ答えが見られるので面白くありません。答えのPageは別途つくり、パスワードというか、コードというかそのようなものを入力すると答えのPageが見られるようにする方法ないでしょうか。クイズですから、パスワードが分かってもたいしたことはないので分かる人には分かってもOKです。クイズはたくさんあるのですが、全ページ同じコードでいいと思っています。
- ベストアンサー
- その他(インターネット・Webサービス)
- 以下のperlのプログラムについて
以下は、多くのファイルの名前を一度に変更するための プログラムのはずなのですが・・・(参考書からもってきました) 分からないところがあるので教えて下さい。 #! /usr/bin/perl/ $op = shift or die"Usage: rename expr [files]\n"; chomp(@ARGV = <STDIN>) unless @ARGV; for(@ARGV){ $was = $_; eval $op; die $@ if $@; rename($was,$_) unless $was eq $_; } 1. opは何ですか? 2. Usageは何ですか? 3. exprは何ですか? 4. ARGVは何ですか? 5. wasは何ですか? 6. $_は何ですか? 7. eqは何ですか? 8. ファイルはどこのディレクトリに入っているものか 宣言しなくていいのですか? 9. できれば、プログラムの一行ずつ教えて頂けると助かります。 perlの初心者、というよりパソコンを使う事自体が 初心者でわからないことが多く困っています。 参考書でいろいろ調べましたが、まだ分からなくて・・・ 勉強不足で申し訳ありませんが宜しくお願い致します。
- ベストアンサー
- Perl
- PerlでLinuxのユーザー認証・管理プログラム
ブラウザでLinuxのユーザー名とパスワードと入力して、 ユーザー認証してログイン後、Linuxユーザーの パスワードを自分で変更できるプログラムが作りたいのです。 /etc/passwdにパスワードが直接記録されていれば簡単なのでしょうが、 シャドウパスワードなので苦労しています。LinuxはFedora Core3です。 まず、/etc/shadowに記録されているような、 $1$ではじまる暗号化されたシャドウパスワードをPerlで作るには どのようにしたらいいのでしょうか。 pwconvのソースをみたらどんなアルゴリズムかわかると思い、 shadow-utilのSRPMをインストールしてみたりしましたがわかりませんでした。PHPのメーリングリストに $salt = substr(md5(microtime()), 0, 9); return crypt($password, "$1$" . $salt); このようなコードがあったのですが、これでは$saltが毎回 代わってしまい、よくある $salt=substr(暗号化されたパスワード,0,2); if(crypt($pass,$salt) ne 暗号化されたパスワード){ &err("パスワードが違います"); } のような認証ができないのではないかと思いました。 Linuxではどのようなアルゴリズムでシャドウバスワード を作り、パスワードの認証をしているのでしょうか。 つまり、簡単にいうとPerlでシャドウパスワードを使った Linuxユーザーのパスワード認証と パスワード変更ができないか、ということなのです。 また、Perlでシャドウパスワードなど作らなくても system()などを使ってLinuxのコマンドを使えば 各ユーザーの認証やパスワードの変更がブラウザでできるという場合は、 教えていただけないでしょうか。 どうかご教示ください。よろしくお願いします。
- 締切済み
- Perl
- if文がうまく書けない(T.T)
某CGIを改造してます。 CGIにIDとPassを組み込もうとしているのですが、うまくできません。 いろいろな認証CGIを真似してやっているのですが… sub pass2{ open (FILE,"$passdata"); @file = <FILE>; close FILE; foreach (@file) { local($nm,$ps)= split(/,/,$_); if ($nm eq $in{'name'} && crypt($in{'password'},$ps) eq "$ps") { &admin; exit; } } &error("認証に失敗しました?"); } この状態だと動くことは動くのですが、ちょっと面倒なので逆転させたいんです。 そこで以下のように作り変えてみました。 if ($nm ne $in{'name'}) { &error("名前が違います"); exit; } if ($nm eq $in{'name'} && crypt($in{'password'},$ps) ne "$ps") { &error("パスワードが違います。"); exit; } } &admin } こうすると、なぜか正しい名前を入れても「名前が違います」のメッセージが出ます。 いったいどこが間違っているのですか? 言語はperlです。 お願いします。
- ベストアンサー
- CGI
お礼
回答を頂き、ありがとうございました。 niftyのサーバーにアップしたソースプログラムを悪意の人に読まれはしないかと思っていました。 cryptを使う方法も有るようですが、先ずはプログラム内での「if文」で対応しようと思います。 ありがとうございました!