2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

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

※必ず採点してもらえるわけではありません。気長に待ちましょう。
※採点してくれる人への感謝の気持ちをもちましょう。

2 :nobodyさん:02/12/29 19:19 ID: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;

3 :nobodyさん:02/12/29 19:20 ID: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__

4 :nobodyさん:02/12/29 19:43 ID:???
システムコールの戻り値は必ずチェックせよ
システムコールの戻り値は必ずチェックせよ
システムコールの戻り値は必ずチェックせよ


5 :nobodyさん:02/12/29 19:47 ID:???
>>4
青ラクダ本 p.630ですか?

6 :nobodyさん:02/12/29 19:50 ID:???
>>3
PASSはcryptでハッシュ化させるほうがいい

7 :◆j0Oon93KwY :02/12/29 20:00 ID:???
>>4
調べてやってみます・・・。
open (TMP , "$tempfile") or print "can't open tempfile $!";
みたいな感じですか?
>>6
$crypted = crypt("012345" ,"sa");
if (crypted($pass,$crypted) ne $crypted{
print "パスワードが違います!";
}

__

こんな感じでよろしいでしょうか?

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

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

とりあえずソース見られてもパスワードは知られない
書き換えられたら元も子もないけどね

9 :nobodyさん:02/12/29 20:09 ID:???
アヒャヒャ 途中でIns押しちゃって 書き足したらおかしくなっちゃったよ
&error("パスワードおかしくない?") if (crypt($pass,sa) ne "saj0Oon93KwY");

未だにCGIがnobody権限で動いてる鯖あるからそういうのには有効かと

10 :nobodyさん:02/12/29 20:39 ID:???
>>9
そのパスワードがログを編集するためだけにあるのなら、あまり効果がなさそうだけどね。
パスワードがわからなくてもログファイルを直接書き換えればよいだけだから。


11 :nobodyさん:02/12/29 20:41 ID:???
>>4
writeも?(^_^;)
それを呼んでいるであろうprintfも?(^_^;)

12 :9:02/12/29 20:51 ID:???
>>10
確かに...そんな鯖使うなってこった

13 :◆j0Oon93KwY :02/12/29 21:18 ID:???
>>8
お返事ありがとうございます。

少し本題からは離れるのですが、nobody権限で動いているサーバ以外では、
(ソースをのぞくことができないサーバ?)
パスワードを暗号化しないでもパスを知られる危険は少ない、
ということでしょうか?(^_^;)

14 :Not 8:02/12/29 21:25 ID:???
>>13
>>8のいうnobody権限で動いていないサーバとはsuEXECが有効なサーバだと思う。
プログラムの所有者の権限で動かすのなら、otherへ与える権限はそのプログラムのおかれているディレクトリへの実行権限だけでよいので管理者以外に読まれる心配はない。


ということかな(^_^;)


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

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

・・・とするとちゃんと動作したようです。
ありがとうございました!

16 :nobodyさん:02/12/29 22:17 ID:???
>>15
意味無い・・・

17 :nobodyさん:02/12/29 22:18 ID:???
>>15
パスワードの暗号化は事前に別の暗号化専用のプログラムでしておかないとだめだろ(^_^;)

18 :◆j0Oon93KwY :02/12/29 23:06 ID:???
意味がないのはうすうす気づいていたんですが、
crypt関数の練習だと思ってやってみました(^_^;)

19 :◆j0Oon93KwY :02/12/29 23:28 ID: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__

20 :nobodyさん:02/12/29 23:31 ID:???
あんまりスレ題と内容が合わなくなってきたな
PERL初心者スレのほうがいいんじゃない?

21 ::02/12/29 23:40 ID:???
>>20
初心者スレで長ったらしいソースを貼って「みてください!」
というのもうざいから、ここはソース貼って
「ここ違うよ」「ここはこうしたほうがいい」というスレのつもりです。
別に質問がなくても、貼ってみてアドバイスがもらえるという。
完璧だ!と思ってる自分のソースでも初心者がおかしやすい間違えとか、
不適切なものとか、自分では気づかないのもあるだろうし、
そういうのを見つけたり見つけられたりしてスキルアップを目指すスレというか・・・。

22 :nobodyさん:02/12/29 23:49 ID:???
ソース貼り専用うpろだ用意したほうがいいんじゃない?

23 :nobodyさん:02/12/29 23:56 ID:???
>>22
>>1

24 :22:02/12/29 23:59 ID:???
ハハハー
2ばかりに目が逝ってきづかんかったわ(藁

25 :nobodyさん:02/12/30 00:21 ID:???
500エラー起こしてるし・・・

26 :山崎渉:03/01/15 13:39 ID:???
(^^)

9 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)