Perlコーディング初心者質問スレ Part 54
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/02/10(土) 19:21:23ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc10.2ch.net/test/read.cgi/php/1164519503/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0331nobodyさん
2007/03/12(月) 02:10:14ID:???0332nobodyさん
2007/03/12(月) 11:05:45ID:???>>326
まず$form{'page'}をprintしてみては?ちゃんと入ってる?
0334nobodyさん
2007/03/12(月) 21:46:55ID:???どんなデメリットあるんだろう・・
0335nobodyさん
2007/03/12(月) 22:41:31ID:???古いコードの保守ならともかく、これから新規で書くんならCGI.pmがオススメ
0336nobodyさん
2007/03/12(月) 23:33:07ID:???0337nobodyさん
2007/03/12(月) 23:59:28ID:???0338nobodyさん
2007/03/13(火) 00:12:24ID:???0339nobodyさん
2007/03/13(火) 00:12:38ID:???CGI::Minimalあたり使ってろよ
0340nobodyさん
2007/03/13(火) 00:37:46ID:7SHHDDju色々調べたけどお手上げ…
0341nobodyさん
2007/03/13(火) 00:43:35ID:???0342nobodyさん
2007/03/13(火) 00:59:27ID:???単純なテーブルならデータにdel_flgとか持たせとくとか
別にテーブル作ってIDとdel_flgで状態を管理とか
0343nobodyさん
2007/03/13(火) 01:21:54ID:7SHHDDjupackage Item;
__PACKAGE__->columns(Primary => qw/id/);
__PACKAGE__->columns(Others => qw/name maker note del_flag/);
__PACKAGE__->has_many(groups => 'Group');
package Group;
__PACKAGE__->columns(Primary => qw/id/)
__PACKAGE__->columns(Others => qw/name del_flag/);
・・・
CDBIでリレーションしてる他のテーブル(例えばGroup)
にもdef_flagのようなフラグをつけていて、
@data = Item->search_like(name => 'pc');
みたいな時に、Groupが論理削除されている場合は拾って来ないようにして、
Item->groups->name
には生きているデータだけ持ってきたいのだけど…
0344nobodyさん
2007/03/13(火) 01:27:58ID:7SHHDDjupackage Group;
__PACKAGE__->columns(Primary => qw/id/)
__PACKAGE__->columns(Others => qw/name item del_flag/);
・・・
でした。因みに出力はTTです。
0345nobodyさん
2007/03/13(火) 01:31:58ID:7SHHDDjuとかだと、Itemの削除したものはあがってこないが、
Groupの方は関係ないから普通に拾ってきてしまうのよね…
>>342 <早速のレスありがとうございます。
0346nobodyさん
2007/03/13(火) 04:25:58ID:???0347nobodyさん
2007/03/13(火) 07:08:26ID:???0348nobodyさん
2007/03/13(火) 10:54:37ID:???0349nobodyさん
2007/03/13(火) 12:59:08ID:RaCGoxpM$in{'name'}ってのを$in{'$rand'}ってやって乱数にしたいんだけど
どうやってやればいいんでしょうか?
ちなみに$randは乱数です。
0350nobodyさん
2007/03/13(火) 13:14:50ID:???$in{$rand} = 'hogehoge';
0351nobodyさん
2007/03/13(火) 13:20:42ID:RaCGoxpM動きません・・・・
0352nobodyさん
2007/03/13(火) 13:26:14ID:RaCGoxpM<input type=text name="OMbqcVSSOZkugP167bljsl3zHt5uVk" size=28 value="">
書き込みのフォームがこんな感じになっていて、name"$rand"ってなっています。
ですが$in{'name'}を$in{'$rand'}にしても書込みをさせてくれません・・・。
どうすればできますでしょうか?
0353nobodyさん
2007/03/13(火) 13:28:17ID:???0354nobodyさん
2007/03/13(火) 13:30:12ID:???$randにしかるべき文字列が設定されているのが前提だが。
0355nobodyさん
2007/03/13(火) 13:34:38ID:RaCGoxpMですが$in{$rand}ってやっても全然書き込み出来ません・・・。
0356nobodyさん
2007/03/13(火) 13:41:49ID:???0357nobodyさん
2007/03/13(火) 13:42:19ID:RaCGoxpM0358nobodyさん
2007/03/13(火) 13:43:39ID:???0359nobodyさん
2007/03/13(火) 13:46:07ID:RaCGoxpM0360nobodyさん
2007/03/13(火) 14:05:26ID:???たとえば、$i に 1234567890 が入っていたら、 1A234A567A890 とか、1 234 567 890 といった感じです
いい方法あったら教えてもらえませんか?
0361nobodyさん
2007/03/13(火) 14:05:53ID:???コーディングでエラーが出たら質問するといい
0364nobodyさん
2007/03/13(火) 14:11:09ID:???@ck = ("a", "b", "c", "d", "e");
for($i = 0; $i < 5; $i++){
$array[$i] =~ s/([^\w\=\& ])/'%' . unpack("H2", $1)/eg;
$array[$i] =~ tr/ /+/;
print "Set-Cookie: $ck[$i]=$array[$i]; expires=Tue, 01-May-2008 11:32:58 GMT;<br>\n";
}
とやると最初のaしか書き込まれません。
全て書き込むためにはどのようにすればいいのでしょうか?
(@arrayには正しく値が入っています)
0366nobodyさん
2007/03/13(火) 14:12:24ID:???0368nobodyさん
2007/03/13(火) 15:39:13ID:???「スレッド一覧を表示する」のと、「1スレッドの投稿内容を表示する」のは、
別々のcgiで分けた方が良いのでしょうか?それとも一つのcgiファイルで
場合分けした方が良いのでしょうか。
この様な掲示板を作ったことがない素人なので、かなり迷っています。
普通は分けるもんなんでしょうか?
0369nobodyさん
2007/03/13(火) 15:52:30ID:???フリーで配布してるやつの中身見てみたら?
コーディングスタイルはおすすめできないけど。
0370nobodyさん
2007/03/13(火) 16:00:28ID:???と思ったんですが、どうなんでしょうか。
0371nobodyさん
2007/03/13(火) 16:12:51ID:???0372nobodyさん
2007/03/13(火) 16:41:42ID:???複数ファイルでファイルごとに処理を分けるか
どちらもメリット/デメリットあるのでお好きに。
0373nobodyさん
2007/03/13(火) 17:22:38ID:???小分けして複数ファイル管理のほうがUNIX的だな
0374nobodyさん
2007/03/13(火) 18:12:46ID:???0375nobodyさん
2007/03/13(火) 23:17:29ID:???0376nobodyさん
2007/03/13(火) 23:29:41ID:???0377nobodyさん
2007/03/13(火) 23:34:43ID:???0378nobodyさん
2007/03/14(水) 02:26:48ID:???IPアドレスだったら正規表現で入力段階で正当なものかを確認。正当じゃなったらサニタイズじゃなくて、エラー処理な。
基本的にIPアドレスは安全だけど、サーバソフトの脆弱性などで不適切なデータが来る可能性は完全に否定できないから、リスクは最小限にすべき。
ついでに、リモートホストはもろ好きな文字列を指定できるから超注意。
殆どの配布CGIでは何の対策もしていないが、DNS登録権限があれば、リモートホストにタグいれることだって出来る。
そして、出力時には、全ての変数 (汚染の可能性があるかないかは別にして) に対してHTMLタグの無効化処理を行うか、
出力文字列も全部無効化するサブルーチン通して、タグが必要な場合には、別サブルーチンを通すべき。
たかが、XSSであっても、同じサーバ上のすべてのサービスに影響がでるし、Cookie漏洩したらセッションハイジャックされるのだから。
0379nobodyさん
2007/03/14(水) 10:33:43ID:???0381nobodyさん
2007/03/14(水) 12:43:20ID:DiCI2BZs<a href="2ch.cgi?page=2">2ch</a>
のように2ch.cgiにpage=2というようなパラメータを渡すときなのですが、
渡すパラメータを数種類もためせたい場合はどうやればいいのでしょうか?
0382nobodyさん
2007/03/14(水) 12:53:48ID:???ただし XHTML なら & じゃなくて &
0383nobodyさん
2007/03/14(水) 12:55:05ID:DiCI2BZsありがとうございます!たすかりました!
0384nobodyさん
2007/03/14(水) 13:55:05ID:???0385nobodyさん
2007/03/14(水) 15:23:52ID:???0386nobodyさん
2007/03/14(水) 19:55:54ID:???2chも/なんだっけか
0387nobodyさん
2007/03/14(水) 19:59:38ID:???0388378
2007/03/14(水) 23:35:50ID:???XSS対策に限って言えば、出力時のHTMLタグの無効化処理だけで問題無いし、入力時にサニタイズ(文字列の変換)をするといったトリッキーな処理はすべきじゃない。
IPアドレスの形式のチェックが必要というのは別の意味で。
IPアドレスというのは掲示板に犯罪予告が書き込まれた場合に警察に情報提供する場合などに必要な情報。
例えば、WebサーバのバグやWebサーバとの連携障害などで、サーバから本来送られてくるべき変数が送られてこなかったり受信できなかったりすることは想定される範囲。
なので、$ENV{'REMOTE_ADDR'} の内容をそのまま記録するのではなく、
・データが送信されてきたこと
・少なくとも型が正当であること
を正規表現で確認し、エラーだったらそこで弾くべき。
ちなみに、Kent Web で配布されている Web Patio などのCGIには、投稿者情報記録機構に重大な欠陥がある。
それは、$ENV{'REMOTE_ADDR'} じゃなくて $ENV{'REMOTE_HOST'} をそのまま記録していること。
$ENV{'REMOTE_HOST'} は 実は詐称できる情報。
一般家庭のようなISP契約じゃあ詐称できないが、漏れが契約しているような企業向けの回線だと、DNSの登録権限が譲渡される場合がある。
ってことで、2cher.example.com に詐称することだって出来る。(host名に < や > を入れることも可能。)
Apache などで host 名でアクセス制御をした場合には、
(1) 接続元のIPアドレスを取得して、それに対するリモートホストをDNSのPTRレコードを参照することにより取得して、
(2) 取得したリモートホストに対する Aレコードを取得して、
(3) (1) と (2) の内容が同一でなかったら無効にする。
という処理を行っているのに、Kent の CGI がやってるのは (1) だけ。
0389nobodyさん
2007/03/15(木) 00:13:01ID:???表示されないんだけど強制アフィでも仕込んでたんか?
0391nobodyさん
2007/03/15(木) 02:36:48ID:???CGIを作るのに必要な勉強はPerl言語の勉強だけでは無い。
その前にTCP/IPの仕組みやDNSの仕組み、Apacheなどのサーバの仕組み、Linuxの仕組みなどを勉強すべきだ。
そうしないとセキュアなプログラミングをすることはできん。
0394nobodyさん
2007/03/15(木) 06:03:54ID:???アナルのほうに中田氏でおねがいします。
0395nobodyさん
2007/03/15(木) 08:46:50ID:???0398nobodyさん
2007/03/15(木) 12:00:10ID:???> (host名に < や > を入れることも可能。)
そんなresolverのバグを力説せんでも。
まともなresolverならそんな名前が返って来たらエラーを返す。
0399nobodyさん
2007/03/15(木) 13:41:02ID:???手元で実験できるマシンで実験してみたが、FreeBSD 7-currentも玄箱linuxも、
"<"や">"が入った名前ははじく。Windowsは今実験できん。
おまえは、どんな腐った環境を前提にものを言っているんだ?
0401399
2007/03/15(木) 23:10:10ID:???Windowsをサーバにしない理由が一つ増えた。
0402nobodyさん
2007/03/16(金) 00:39:54ID:???0403nobodyさん
2007/03/16(金) 02:10:14ID:???そんな厳密な制御してもクレームの山になるだけだと思うけど。
0404nobodyさん
2007/03/16(金) 02:20:09ID:???そういういい加減な処理をしたいなら、リモートホストのほかにIPアドレスも記録するべき。
犯罪予告の投稿者ホストが政府機関に成りすましたホストだったらどうするの?
下手したら管理者が責任を問わされるぞ
0407nobodyさん
2007/03/16(金) 03:33:49ID:???0408nobodyさん
2007/03/16(金) 04:18:14ID:???べつにどうでもよくね?
0409nobodyさん
2007/03/16(金) 10:09:23ID:???一番性質が悪いタイプw
0410nobodyさん
2007/03/16(金) 10:35:41ID:???> その前にTCP/IPの仕組みやDNSの仕組み、Apacheなどのサーバの仕組み、Linuxの仕組みなどを勉強すべきだ。
おれIPとかUNIXとか全くわからないんだけど
どう勉強すればいい?
0412nobodyさん
2007/03/16(金) 12:42:30ID:???そういうの書き込みされたら、すぐに削除すればいいんじゃない?
大体ここみたいに大きなところを管理しているわけじゃなかろうに…
0413nobodyさん
2007/03/16(金) 18:46:21ID:???hoge.pmとかを置いてrequireで読み込ませようとしてるのだけど、一部出来ないので質問。
とりあえず、use hoge;はrequire hoge;にして同じ階層にhoge.pmを置けば問題なかったけど、
use POE::Component::IRC::Common qw(:ALL);みたいなのはどうすればいいのか教ええてクリ。
エラーメッセージ見ると
Can't locate POE/Component/IRC/Common.pm
って書いてるのでそのディレクトリ作って置いてみてもダメみたいだった。
requireで hoge::moge みたいに :: の指定がされてる場合は、
素直に同階層に置いちゃって require Common; で指定しちゃって問題ないのかな。
0414nobodyさん
2007/03/16(金) 18:56:35ID:???そこにモジュールいれて
use lib すればいいよ
0415nobodyさん
2007/03/16(金) 19:06:52ID:???それならまとめて放り込めば良いのね。
ありがと!
0416nobodyさん
2007/03/17(土) 02:24:03ID:???もうちょっと丁寧な解説は
http://www.nishishi.com/blog/2005/12/perl_module_per.html
0417nobodyさん
2007/03/17(土) 04:24:56ID:tNPzkWAm毎回メモと睨めっこしているんですが
よろしくおねがいします
0418nobodyさん
2007/03/17(土) 04:28:18ID:???0419nobodyさん
2007/03/17(土) 05:06:00ID:tNPzkWAm0421nobodyさん
2007/03/17(土) 05:35:33ID:???0422nobodyさん
2007/03/17(土) 08:44:30ID:FBwp50T+mkeditor つかってますが、他にいいの有ったら宜しく。
0423nobodyさん
2007/03/17(土) 09:48:25ID:???winならgvimがいいな
0424nobodyさん
2007/03/17(土) 09:50:25ID:???0425417
2007/03/17(土) 16:18:30ID:tNPzkWAmぐぐっても出てこなかったです
421さん
terapadを使っていますが
よく;を打つのを忘れたりします
そのせいで三十分ぐらい睨めっこ
0426nobodyさん
2007/03/17(土) 16:20:18ID:???重複を取り除いてから、元のと要素数を比較するという
チンポな方法しか思いつきません。
0427nobodyさん
2007/03/17(土) 16:47:02ID:???my %hash;
map { $hash{$_}++ } @array;
print keys %hash;
0428nobodyさん
2007/03/17(土) 16:55:18ID:BFzI3Dy+なにが原因だと思われますか?
OSはwindowsです。
0429nobodyさん
2007/03/17(土) 16:58:19ID:???<br>にしとけ
0430nobodyさん
2007/03/17(土) 16:58:24ID:???■ このスレッドは過去ログ倉庫に格納されています