トップページphp
26コメント10KB

初心者がソースを貼って上級者が採点するスレッド

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/12/29 19:11ID:???
初心者がプログラムのソースを貼り付けて、
それを上級者が採点、手直しをし、初心者のスキルアップを手助けするという趣旨のスレです。
ソースはコピペでもいいですが、長い場合は、あぷろだを使ったほうがいいかも。
あぷろだ:http://www.patipati.com/upload/upload.cgi

※必ず採点してもらえるわけではありません。気長に待ちましょう。
※採点してくれる人への感謝の気持ちをもちましょう。
0002nobodyさん02/12/29 19:19ID:T68uzibZ
perl初めて1週間の初心者です。
日記サイト更新のためのスクリプトを書いてみたのですが、
パスワードのセキュリティなどがかなりヘタレだと自覚しています。
以下のスクリプトでファイルに書き込み、
read.cgiというファイルを読み込むCGIでdatを読み込んでいます。

#!/usr/local/bin/perl

require "./cgi-lib.pl";
require "./jcode.pl";
ReadParse();

#変数に入れる
$comment = $in{"comment"};
$pass = $in{"pass"};
jcode::convert(\$name,"euc");
jcode::convert(\$comment,"euc");

$datefile = "./date/visitor.dat";
$tempfile = "./date/temp";

umask 0;
0003nobodyさん02/12/29 19:20ID:T68uzibZ

if ( $pass eq "012345" ){

#ファイルをオープン

open(TMP,">> $tempfile");
print TMP "<table border=\"1\" width=\"555\" bordercolor=\"#E9EAFE\" bordercolorlight=\"#FFFFFF\" bgcolor=\"#FFFFFF\"><tr><td>$comment</td></tr></table><br>\n";

open(DATE, "< $datefile");
while( <DATE> ){
print TMP $_;
}
close(DATE);
close(TMP);

rename($tempfile,$datefile);

print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>\n<TITLE>更新</TITLE>\n</HEAD>\n";
print "<BODY>\n<a href=\"./read.cgi\">更新されました</a>\n";

}
else{
print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>\n<TITLE>エラー</TITLE>\n</HEAD>\n";
print "<BODY>\n<a href=\"./list.html\">パスワードが違います!</a>\n";
}
print "</BODY>\n</HTML>";

__END__
0004nobodyさん02/12/29 19:43ID:???
システムコールの戻り値は必ずチェックせよ
システムコールの戻り値は必ずチェックせよ
システムコールの戻り値は必ずチェックせよ
0005nobodyさん02/12/29 19:47ID:???
>>4
青ラクダ本 p.630ですか?
0006nobodyさん02/12/29 19:50ID:???
>>3
PASSはcryptでハッシュ化させるほうがいい
0007◆j0Oon93KwY 02/12/29 20:00ID:???
>>4
調べてやってみます・・・。
open (TMP , "$tempfile") or print "can't open tempfile $!";
みたいな感じですか?
>>6
$crypted = crypt("012345" ,"sa");
if (crypted($pass,$crypted) ne $crypted{
print "パスワードが違います!";
}

__

こんな感じでよろしいでしょうか?
0008nobodyさん02/12/29 20:05ID:???
>>7
いや 別CGI等でcryptしたやつと一致するかどうか
生パスワードは一切CGIに記述しない
例えば sa でハッシュ化したやつがsaj0Oon93KwY だったら

&error("パスワードおかしくない?") if crypt($pass,sa) ne "saj0Oon93KwY")
こんな感じかな?

とりあえずソース見られてもパスワードは知られない
書き換えられたら元も子もないけどね
0009nobodyさん02/12/29 20:09ID:???
アヒャヒャ 途中でIns押しちゃって 書き足したらおかしくなっちゃったよ
&error("パスワードおかしくない?") if (crypt($pass,sa) ne "saj0Oon93KwY");

未だにCGIがnobody権限で動いてる鯖あるからそういうのには有効かと
0010nobodyさん02/12/29 20:39ID:???
>>9
そのパスワードがログを編集するためだけにあるのなら、あまり効果がなさそうだけどね。
パスワードがわからなくてもログファイルを直接書き換えればよいだけだから。
0011nobodyさん02/12/29 20:41ID:???
>>4
writeも?(^_^;)
それを呼んでいるであろうprintfも?(^_^;)
0012902/12/29 20:51ID:???
>>10
確かに...そんな鯖使うなってこった
0013◆j0Oon93KwY 02/12/29 21:18ID:???
>>8
お返事ありがとうございます。

少し本題からは離れるのですが、nobody権限で動いているサーバ以外では、
(ソースをのぞくことができないサーバ?)
パスワードを暗号化しないでもパスを知られる危険は少ない、
ということでしょうか?(^_^;)
0014Not 802/12/29 21:25ID:???
>>13
>>8のいうnobody権限で動いていないサーバとはsuEXECが有効なサーバだと思う。
プログラムの所有者の権限で動かすのなら、otherへ与える権限はそのプログラムのおかれているディレクトリへの実行権限だけでよいので管理者以外に読まれる心配はない。


ということかな(^_^;)
0015◆j0Oon93KwY 02/12/29 22:08ID:???
>>14
なるほどです(^_^;)
(suEXECについて全然わからないのでいろいろ検索してみたけど
今だ理解にはいたらず・・・。)
管理者以外にソースを読まれる可能性がないサーバだったら
暗号化をしなくても読まれないってことですね。

あえてやるんだったら
#passwordの設定
$crypted = crypt("012345" , "sa");
if ( crypt($pass , "sa" ) eq $crypted ){

・・・とするとちゃんと動作したようです。
ありがとうございました!
0016nobodyさん02/12/29 22:17ID:???
>>15
意味無い・・・
0017nobodyさん02/12/29 22:18ID:???
>>15
パスワードの暗号化は事前に別の暗号化専用のプログラムでしておかないとだめだろ(^_^;)
0018◆j0Oon93KwY 02/12/29 23:06ID:???
意味がないのはうすうす気づいていたんですが、
crypt関数の練習だと思ってやってみました(^_^;)
0019◆j0Oon93KwY 02/12/29 23:28ID:T68uzibZ
>>2-3で書いたソースを読むためのcgiです。
とりあえずdatを読めるだけ、ということで書いてみました。
これからは最新10件だけ表示される、とかやりたいのですが、
まだまだ勉強不足です。(^_^;)

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>\n";
print "<TITLE>read.cgi</TITLE>\n";
print "</HEAD>\n<BODY><body bgcolor=\"#E9EAFE\">\n";
print "<DL>\n";
$file = "./date/visitor.dat";
open ( OUT,"< $file");
@date = <OUT>;
foreach (@date){
print "$_<br>";
}
close(OUT);
print "</DL>\n";
print "</div>\n</BODY>\n</HTML>\n";

__END__
0020nobodyさん02/12/29 23:31ID:???
あんまりスレ題と内容が合わなくなってきたな
PERL初心者スレのほうがいいんじゃない?
002102/12/29 23:40ID:???
>>20
初心者スレで長ったらしいソースを貼って「みてください!」
というのもうざいから、ここはソース貼って
「ここ違うよ」「ここはこうしたほうがいい」というスレのつもりです。
別に質問がなくても、貼ってみてアドバイスがもらえるという。
完璧だ!と思ってる自分のソースでも初心者がおかしやすい間違えとか、
不適切なものとか、自分では気づかないのもあるだろうし、
そういうのを見つけたり見つけられたりしてスキルアップを目指すスレというか・・・。
0022nobodyさん02/12/29 23:49ID:???
ソース貼り専用うpろだ用意したほうがいいんじゃない?
0023nobodyさん02/12/29 23:56ID:???
>>22
>>1
00242202/12/29 23:59ID:???
ハハハー
2ばかりに目が逝ってきづかんかったわ(藁
0025nobodyさん02/12/30 00:21ID:???
500エラー起こしてるし・・・
0026山崎渉03/01/15 13:39ID:???
(^^)
■ このスレッドは過去ログ倉庫に格納されています