トップページphp
1001コメント360KB

Perlコーディング初心者質問スレ Part 52

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/09/15(金) 14:01:51ID:gobry0n2
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2-10

前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0002nobodyさん2006/09/15(金) 14:02:17ID:gobry0n2
関連スレ
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/

【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/

【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/

★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/

CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/

★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1143834740/

【 スクリプト改造依頼スレ 】(丸投げ) part5
http://pc8.2ch.net/test/read.cgi/php/1141174205/
0003nobodyさん2006/09/15(金) 14:02:58ID:gobry0n2
ム板Perlスレより 1 of 2

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/

[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/

[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0004nobodyさん2006/09/15(金) 14:05:07ID:gobry0n2
ム板Perlスレより 2 of 2

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0005nobodyさん2006/09/15(金) 14:16:42ID:???
次スレ
http://ex16.2ch.net/test/read.cgi/news4vip/1158297150/
0006nobodyさん2006/09/15(金) 15:47:59ID:???
>>1
s/(.*'-')o/~~otukare-/;
0007nobodyさん2006/09/15(金) 23:40:06ID:???
VIPのバカが釣りにはしゃいで喜んでいます

女子大生拉致監禁事件!?12くらい
http://ex16.2ch.net/test/read.cgi/news4vip/1158323954/

「どう見ても釣りだろ」
というと顔を真っ赤にしてレスしてくるので注意!!!
0008nobodyさん2006/09/16(土) 11:00:05ID:vjnDDSY/
chomp(@lines = <STDIN>);
@lines = sort @lines;
print "@lines\n";
がソートされたものを表示して

@lines = sort chomp(@lines = <STDIN>);
print "@lines\n";
が要素の個数を表示するのは

前者は配列をダブルクォーテーションの中で展開していて
後者はリストをスカラーコンテキストで使っているから
という解釈で正しいでしょうか?
0009nobodyさん2006/09/16(土) 11:18:12ID:????BRZ(3000)
chompの戻り値は切り落とした文字数だからね
0010nobodyさん2006/09/16(土) 11:37:13ID:vjnDDSY/
>>9
ありがとうございます。
0011nobodyさん2006/09/16(土) 22:23:36ID:???
一行にしたいなら:
chomp(@list = sort <STDIN>);
0012nobodyさん2006/09/18(月) 19:19:34ID:???
STDINに直接sort指定できるんだ。
その発想は無かった。
0013nobodyさん2006/09/18(月) 22:14:51ID:???
そりゃsortが要求するのはLISTであってARRAYじゃないしね。
普段はあんまり意識しないけど、LISTとARRAYの違いは重要。
0014nobodyさん2006/09/18(月) 22:14:58ID:???
>>12
STDIN を直接ソートしてるわけじゃなくて、
リストコンテキストで評価することでファイルの中身をソートしてるだけ。
0015nobodyさん2006/09/18(月) 22:32:44ID:???
なるへそ。
そういう動作の仕方を知ってると色々応用できるし参考になるよ。
0016nobodyさん2006/09/19(火) 06:52:45ID:???
Shift_JIS でコーディングをする場合のセキュリティについての質問です。

例えば、次のようにユーザ入力の値をダブルクォート内に代入したとします。
この時エスケープする文字列は、 & と < と > と " と ' です。

<a href="http://$hoge";>

バイナリエディタで解析した " (ダブルクォート) の 16進表記は、"22" です。
ここで、$hoge に バイナリレベルで "82" をいれてみるとどうなるかやってみました。(バイナリファイルを一般のテキストエディタで表示したときの、"・"(半角) と表示されるあれです。)
それを出力して、IE と Firefox と Opera で表示したところ、 "82 22" で 1つの不正な文字 "・"(全角) として表示され、ダブルクォートが消えうせていました。

当然、掲示板のURL欄にこういう文字列をいれられたら、それ以降のデータがダブルクォート内のものと扱われますし、
その後の投稿内容の一部が " (ダブルクォート) 外にすることも可能で、"onload" イベントなどを使った、XSS攻撃も可能になるわけです。

大手CGI配布サイトのCGIで実験してみたところ、なんと実際にXSS攻撃が可能でした。

つまり、下記の条件を満たしてるPerlには脆弱性があることになります。

・文字コードとしてShift_JISを使っている。
・ダブルクォート内に正規表現などで入力内容を規制していない文字列が代入される。
 (所謂、< とか > とか " のサニタイズをしていてもこの攻撃は可能。)
・Shift_JIS に存在しないコードを含む文字列が存在しないかの確認をしてない。
0017162006/09/19(火) 06:56:55ID:???
上の脆弱性を要約すると、

「"(ダブルクォート) は 1バイト文字だけど、ユーザが送る文字列の最後に不正な1バイトコードをいれることで、
その1バイトコードと、ダブルクォートが合体した、不正な文字化けした2バイトデータと扱われ、ダブルクォートが消失してしまう(文字化けした・になる)」ということです。

こういった「文字化けを悪用した攻撃」に関する解説サイトはなかなか見つからず困っています。(上の情報は自分で検証した結果です。)
これの対処についていくつか質問があります。


・ユーザから送られてきた文字列が、Shift_JIS として正当であることを確認する、モジュールなどはないでしょうか?
それができたら、文字化けを悪用した攻撃は防げるかと思います。


・EUC-JP や UFT-8 ではこのような問題は発生しないのでしょうか?
参考: http://www2d.biglobe.ne.jp/~msyk/cgi-bin/charcode/bbs.cgi?past=1&c=r&n=82

 ・もし、EUC-JP などなら問題が生じないのであれば、スクリプトの文字コードの変換をやろうかと思います。
  Shift_JIS の駄目文字を "\" でエスケープしているコードを自動的に変換するソフトはないでしょうか?


ご教示お願い致します。

0018162006/09/19(火) 06:58:25ID:???
>>16 の <a href="http://$hoge";> が2chブラウザで見ると、
実体参照化される場合があるようです。

<a href=”http://$hoge”> です。
0019nobodyさん2006/09/19(火) 12:24:14ID:???
XSSはブラウザ依存だからなぁ。
「このサイトはテキストブラウザ専用です」と書いておけばおk。
完全に排除したいなら最後に半角スペースを入れるくらいしかないと思う。
なぜならクライアントはページ製作者の指定したエンコードで表示するとは限らないから。
0020nobodyさん2006/09/19(火) 12:38:09ID:???
>"onload" イベントなど
s/=/?/g;

>Shift_JIS として正当であることを確認
正規表現
0021nobodyさん2006/09/19(火) 12:39:43ID:???
表示されてない…
s/=/&#61;/g;
0022nobodyさん2006/09/19(火) 15:40:09ID:???
>>16
てーか普通URLに \x7f 以上の文字あるときはそれ全部エスケープするだろ?
あのくだらない日本語ドメインかなんかですか?(^ω^;
0023nobodyさん2006/09/19(火) 17:02:06ID:???
>>17
> ・ユーザから送られてきた文字列が、Shift_JIS として正当であることを確認する、モジュールなどはないでしょうか?
正規表現一行で実現できるよ。
0024nobodyさん2006/09/19(火) 18:25:23ID:???
if構文でandとorなんですが、
AでかつBでかつCの場合、のような全部andというわけではなく
AでかつBかCの場合、という混合の書き方はありますでしょうか?
現在は
if($foo eq 'A'){
if($bar eq 'B' or $bench eq 'C'){
print $foobar;
}
}
みたいに入れ子にしてます。
0025nobodyさん2006/09/19(火) 18:27:03ID:tgpbfNw0
>>24
($foo eq 'A') && ($bar eq 'B' or $bench eq 'C')
0026nobodyさん2006/09/19(火) 18:28:07ID:???
>>25
即答有難う御座いました。
使っていきます。
0027nobodyさん2006/09/19(火) 18:39:53ID:LgUjbLc5

http://www.technorati.jp/home.html

テクノラティで任豚が発狂中〜〜www
ここの左側で「踊っているマリオ」のところが任豚ブログだ。
任豚パワーは凄まじい〜〜。
0028nobodyさん2006/09/19(火) 20:00:03ID:???
>>23
kwsk
0029nobodyさん2006/09/19(火) 20:10:20ID:???
>>28
$str = qr/^([\n\x20-\x7e\xa1-\xdf]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*$/;
実際に使ってるのはこんな感じ。
0030nobodyさん2006/09/19(火) 20:29:05ID:???
>>29
サンクス。
使ってみる。
0031nobodyさん2006/09/21(木) 03:42:14ID:???
Perlでのセッション管理で汎用的に使用されているような
モジュール・ライブラリがあれば教えていただきたい次第
です。

CGI::SessionやWalrus::Session::Lite等が検索で出てきま
すが、環境によって動作する・しないというものもあるみた
いなので一番安全で手軽に導入できるものがあれば
有り難いです。
0032nobodyさん2006/09/21(木) 06:44:43ID:31FpoYel
CGIで使うんならCGI::Sessionが無難と思われ
■ このスレッドは過去ログ倉庫に格納されています