Perl コーディング初心者質問コーナー Part35
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/05/26 16:48ID:kkhhiYmo【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0685nobodyさん
04/07/02 14:58ID:???>サイニタイジング自体は開いてか受け取ったデータをどこで使うかによって変わってくる。
サニタイジング自体は相手から受け取ったデータを
の間違い。ごめん。
0686678
04/07/02 15:16ID:???今XSSについて再度記事をよんでますが、掲示板以外でもスクリプトになり得るタグは削除しなくちゃいけませんね。
うちのサイトでタグをちゃんと消していないと、第三者がうちを使っていたずらしちゃいますもんね。
とりあえず、セキュリティホールのなくせるよう頑張ります。ありがとうございました。
0687nobodyさん
04/07/02 15:28ID:???俺は必要のない記号は全て削除してる。
=~|\/;:+][{}()`'"<>&%#,
っていうか
*-@.
以外は全部削除しちゃいなよ。注文プログラムなら上の四つがあれば問題ないでしょ?
掲示板なら実態参照すればいいし。
0688nobodyさん
04/07/02 15:36ID:???基本的にタグだけでも実態参照にしてるサイトならあまり大きな問題はないと思うけど、
対策を何もしていないとこ見てみたい。
http://www.atmarkit.co.jp/fsecurity/special/31xss/xss01.html
ここなんかXSSについてある程度詳しく書いてるけど、ここが言うには
「XSS対策してないサイトが多すぎる」だってさ。
ほんとにそうなんかな?
0689nobodyさん
04/07/02 16:26ID:???あとはSQLインジェクションはヤバイ。まじでヤバイよ。
まずdeleteできちゃう。もう1レコードなんてもんじゃない。テーブルごと。
何しろ無制限。スゲェ!なんか制限とかないの。
しかも他のテーブルも消せちゃう。ヤバイよ、真っ白だよ。
だって普通は削除できないじゃん。だって削除されたら困るじゃん。
訴えられたら困るっしょ。
だからそのCGIはロールバックできる。話のわかるヤツだ。
けど普通のCGIはヤバイ。そんなの気にしない。消えるだけ。
とにかく貴様ら、SQLインジェクションのヤバさをもっと知るべきだと思います。
そんなヤバい仕事をしてる貴様らとか超偉い。もっとがんばれ、超がんばれ。
0690nobodyさん
04/07/02 16:56ID:???私はCGI側でリファラーを一致してるかチェックしてるんですがこれでもまだセキュリティー的にあぶないんでしょうか?
0693nobodyさん
04/07/02 17:11ID:???hiddenそのものが駄目なわけではないので要は使い方の
問題だと思うのだが。hiddenだろうがなんだろうが、やろうと
思えばclientからは何でも送れるので過度に信用するなっ
てこった。
リファラーもclientの自己申告なんで騙され放題。そんなも
のでまともなチェックにはならない。足切りぐらいにはなる
けどな。
0695nobodyさん
04/07/02 18:02ID:???DBIならいきなり渡されたデータを埋め込んだSQL文作って実行じゃなくて
prepare-bind_param-executeにすればめったなことはないと思うんだが
オレの認識は甘いだろうか?
0696nobodyさん
04/07/02 18:11ID:???やっぱりそうですか。
私が作ってるスクリプトはhiddenの値を変えられるとかなり危険なので修正してみます。
どこかに参考になる方法とか載ってないでしょうか?
0697nobodyさん
04/07/02 18:43ID:???CGI: Common Gateway Interface part 11
http://pc5.2ch.net/test/read.cgi/php/1055597189/
0698nobodyさん
04/07/02 19:32ID:???っていうかさ、クエリは常識として毎回中身をチェックしろよ。
多分今の状態ならお前のサイト思いっきりXSSのえじきだよ。
お前の知らないところで、お前のサイトがウイルス配布に使われてるかもよ。
もちろん配布してるのはお前だからお前が逮捕。とりあえず>>688が晒してるサイト程度の
知識は必要だ。
http://www.ipa.go.jp/security/awareness/vendor/software.html
ついでにここも読んどけ。
0699nobodyさん
04/07/02 19:37ID:???うむ、XSSにしろSQLインジェクションにしろhiddenパラメータにしろ、
Perl に限定されない CGIセキュリティの話は、
そちらで話すことが望ましい。
0701nobodyさん
04/07/02 22:18ID:???サイバーノーガード戦法の時代ですよ。
0702nobodyさん
04/07/03 15:11ID:???DBにパスワードを書ける方法がうまくいきません。
具体的には、perlスクリプトからuse Pgでconnectする際、
ユーザ名とパスワードで認証をかけたいのですが、
createdb -W で指定したパスワードがどうしてもきかない
ようです。
認証をかけるところが間違っているのではないかと思って
いるのですが、どうしてもやり方がわかりません。
ご教授いただけますと幸いです。
0703nobodyさん
04/07/03 17:22ID:dEpm626aうまくいく行と文字化けする行があるのですが,うまく変換する
方法はありますか?
CSVデータはこれです。
http://www.post.japanpost.jp/zipcode/dl/kogaki/lzh/ken_all.lzh
use Jcode;
open IN, "./ken_all.sjis";
while(<IN>){
my $line = $_;
chop $line;
$line = jcode($line)->h2z->euc;
print "$line\n";
}
0704nobodyさん
04/07/03 18:07ID:???お茶呑みながらじっくりと眺めてみる。
http://member.nifty.ne.jp/hippo2000/perltips/Pg.htm
>>703
while(<IN>){
chomp;
printf qq|%s\n|, jcode($_, 'sjis')->h2z->euc;
}
0705nobodyさん
04/07/03 19:05ID:???お返事有難うございます。
connectでパスワードを入れても入れなくても
認証されちゃうので、DB(もしくはテーブル)作成
時の問題と踏んでいるのですが間違っております
でしょうか。
0708nobodyさん
04/07/03 21:54ID:MbMdEpi2何にも情報が無いので、
とりあえず pg_hba.conf の設定でも見直してみろ、
と言ってみる
0709nobodyさん
04/07/03 22:29ID:nSj0iEMYのようにして、桁数を調べたいのですが、どのようにすれば良いのでしょうか?
0710nobodyさん
04/07/03 22:32ID:???0712709
04/07/03 22:45ID:nSj0iEMYでした。すいません・・・
0714nobodyさん
04/07/03 23:36ID:???$i=1;
while(1){ if(@_%10<10) $i++) }
return $i+1;
}
0715nobodyさん
04/07/03 23:38ID:???$i=1;
while(1){
$j=1;
for($j=0; $j<$i; $j++){ $j*=10; }
if(@_%$j<10) $i++) }
return $i+1;
}
0717nobodyさん
04/07/03 23:51ID:???別に動かそうと思って書いたわけじゃないが
0719nobodyさん
04/07/04 00:03ID:???10のn乗で割っていくってようりょうだぞーってレスのつもりだが
で、10で割り続けてたので単純にpow入れようやっておもい
Perlってpowあったかなーとおもい、自分でn乗だすようにしてーー
って適当にやったから括弧の場所とかほっときぱなしになったわけだが
良い訳とかキモイ
0720nobodyさん
04/07/04 00:06ID:???int(log($NO)/log10)+1
0721719
04/07/04 00:06ID:???たしかにそうとられても仕方ない罠。
0723nobodyさん
04/07/04 00:12ID:???0724719
04/07/04 00:16ID:???0725nobodyさん
04/07/04 00:26ID:???length取ったほうが速そうだな。誰かベンチしてみない?
0726nobodyさん
04/07/04 00:49ID:???0727nobodyさん
04/07/04 00:52ID:???0728709
04/07/04 00:54ID:Udr24Tj0lengthで調べてみたら、出来ました。ありがとうございました。
もう一点、お聞きしたいのですが、
特定の文字列と一致した場合だけエラーになるようにしたいのです。
$NO="123456";
$NO2="23";
if ($NO eq /$NO2/g) {
print "エラーです";
}
こんなふうに書いたのですが、上手くいきません。
サイトをいくつか見ながら書いてみたのですが、原因がわかりません。
すいません、どなたか教えてください。
0729nobodyさん
04/07/04 00:54ID:???=~
0730nobodyさん
04/07/04 01:35ID:???0732709
04/07/04 01:47ID:Udr24Tj0HTMLで言う、「とほほのWWW入門」みたいに、
Perl開設の良いサイトなど無いでしょうか?
ここのスレに載っていたページはどうもわかりにくくて・・・
0733nobodyさん
04/07/04 01:49ID:???@no = qw(1 2 3 4 5 6);
print $_ = @no."桁\n";
0734nobodyさん
04/07/04 02:16ID:???http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
0735nobodyさん
04/07/04 02:41ID:???> ここのスレに載っていたページはどうもわかりにくくて・・・
だったらなおのこと、本も用意したほうがいいですよ。
>>733
頑張ってください。>>726-727も眺めつつ。
0736nobodyさん
04/07/04 03:33ID:???じゃあ「CGI&Perl究極のレシピ350 とほほが教える」でも買ってみたら?
http://www.esbooks.co.jp/books/detail?accd=31095149
Perlの解説本というより目的別のサンプル集みたいなのだから
丸々コピーばかりしないで参考にすればいくらか勉強にはなるだろう。
0737nobodyさん
04/07/04 07:41ID:???何気に役に立つよ
0738nobodyさん
04/07/04 10:09ID:???知ってると思うけど
http://tohoho.wakusei.ne.jp/wwwperl.htm
0739nobodyさん
04/07/04 13:38ID:bJ9Q5bUPパスワードの暗号か処理で暗号化を施した場合、
暗号化をログから解除して元パスワードを知ることはやはり不可能でしょうか?
例えば↓
sub encrypt {
local($inpw) = $_[0];
local(@char, $salt, $encrypt);
@char = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand;
$salt = $char[int(rand(@char))] . $char[int(rand(@char))];
$encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt);
return $encrypt;
}
のようなものからパスワードを探ることは・・・?
0740nobodyさん
04/07/04 14:18ID:???0741nobodyさん
04/07/04 14:58ID:???0742nobodyさん
04/07/04 18:07ID:???0743nobodyさん
04/07/04 18:39ID:???$testに環境変数の一部をUserAgent,IPみたいにコンマ区切りで入れたいだけなんですが…
助けてください…
0744nobodyさん
04/07/04 18:43ID:???助けてください…
0745nobodyさん
04/07/04 18:44ID:???07467M. ◆dq7M./4Uw.
04/07/04 18:58ID:???それが出来ないから暗号として成り立つわけで。。。
0747nobodyさん
04/07/04 20:30ID:???今は
$file1 = 'one.jpg';
$file2 = 'two.jpg';
$temp = 'temp.jpg';
rename $file1,$temp;
rename $file2,$file1;
rename $temp,$file2;
ってやってるけど、いい方法ある?
教えてエロい人!
0748nobodyさん
04/07/04 21:22ID:???renameの戻り値は見といたほうがいいと思うよ。
あとはtemp.jpgが固定なのとrenameだと上書きされる
のがちと気になるかな。
私がやるなら多分こんな感じにすると思う。最初のrenameを
linkにしたのは一時ファイル名がすでに使われてるときに上書き
しないため。途中でエラーになった時の処理をどこまで凝るかは
その時によるけどor dieは一番手抜きのパターンね。
$file1 = 'one.jpg';
$file2 = 'two.jpg';
$temp = "temp.jpg.$$";
link $file1,$temp or die;
rename $file2,$file1 or die;
rename $temp,$file2 or die;
0750nobodyさん
04/07/04 22:07ID:Sq5R/TGN全文検索でヒットした奴を
行の真ん中に表示されるようにしたいんですがどうすれば良いんですか?
つまりglobalを検索したとすると、
global SchoolNet Director
we have increased the US publics global awareness
CanWest global Communications
help address global warming issues
California Wood Use Endangers global
↑こういう風に結果を出したいんです。
行全体を出力して、まんなかに検索した語を表示させたいんですが
そもそもどういう方針でやればいいのかさえわかりません。
どうすれば良いんですか?
0752nobodyさん
04/07/04 22:46ID:???もしそうだとしたら、単にHTMLの話だから、
プログラミングでも、Webプログラミングでもなく、Web製作板に行くべきだな。
0755nobodyさん
04/07/05 00:30ID:AbFm7153windowsで動かしているとき、
perlを動かすときにdos窓のウィンドウタイトルはc:\perl\bin\perl.exeや
コマンドプロントから起動させた場合はc:\winnt\system32\cmd.exeのようになって
いると思うのですがそれを任意の文字に設定したいのです。
色々検索してショートカットから起動すれば変えられるのはわかったのですが
当方、rocket mouseというtoolからウィンドウタイトルを任意の文字にした
ものを起動させるのが目的でして、このtoolの場合、plファイルのショートカット
を指定してもそのショートカットから起動させるのではなく、リンク先を参照して
起動するため、ウィンドウタイトルを変更して起動させることができません。
ここを調べろ、ここは確認したのかなどのご指摘ありましたらよろしくお願いします。
0758755
04/07/05 03:14ID:???>>756さんの言うとおりもう一度1を読み返してみます。
>>757
私はてっきりperlスレで質問する内容だと思ったのですが
ご指摘いただいたので違う方向からも再度考えさせてもらいます。
ありがとうございました。
0759nobodyさん
04/07/05 04:03ID:???fork関数を使えば良いですか?
0760nobodyさん
04/07/05 06:29ID:???自分はこんな感じです
/&/&/
/\"/"/
/\'/?/
/</</
/>/>/
/\s/ /
/\r\n/<br>/
/\r/<br>/
/\n/<br>/
他に
こんな文字も危険、この文字はこれに置換がいい的なアドバイスもOK
0761nobodyさん
04/07/05 06:30ID:???/&/&amp;/
/\"/&quot;/
/\'/&#39/
/</&lt;/
/>/&gt;/
/\s/&nbsp;/
/\r\n/<br>/
/\r/<br>/
/\n/<br>/
0762nobodyさん
04/07/05 06:48ID:???0763nobodyさん
04/07/05 10:32ID:???1. コーディング以前の箇所で躓いている
2. 自分の抱える問題がコーディングの問題なのかどうかを切り分けできない
3. そもそもコーディングという言葉の意味を知らない
のいずれかだから。
たぶんこのスレも「Perlを使ったCGIに関する質問ならなんでもOK」だと思われてる
0764nobodyさん
04/07/05 10:59ID:???スレタイ嫁
だけじゃ通じなくなってきたワケだな。
0765nobodyさん
04/07/05 15:04ID:???0768nobodyさん
04/07/05 16:48ID:kgB0NkdW### 除算の繰上げ
$a = 10;
$b = 3;
$c = $a % $b;
$d = int($a / $b);
if($c){$d++;}
いつもこんな感じですが
なんか、もっさりしてます。
スマートにコーディングしたものですが・・・。
0769nobodyさん
04/07/05 18:12ID:???$b = 3;
$d = int(($a + $b - 1) / $b);
0771nobodyさん
04/07/05 23:29ID:???0772nobodyさん
04/07/06 00:04ID:Xk4rbtY7ファイルサイズを小さくしたいのですが、できません。
ググってみたところ
$image->Strip();
で削除できるという記述をみたのですが、同じようにやっても
画像が表示できなくなります。
どうやればexif情報だけすっぱり消せるかご存知の方は
いらっしゃいませんでしょうか?
0773nobodyさん
04/07/06 02:32ID:???cookieのexpiresに使える形式の時間の取得って、
gmtime time
だと全て数字だから微妙に違うよね。
cookie用に使える形式にするのに自分でルーチンを作ろうかなとか思ってるけど、
既存のモジュールで、こういうメソッドもってるやつないのかな?
0774nobodyさん
04/07/06 02:52ID:???http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Cookie.pod
0775nobodyさん
04/07/06 04:13ID:???http://cachu.xrea.jp/perl/
0777nobodyさん
04/07/06 08:08ID:???PERLでは引数が整数であるか、少数点つきの数字であるかを判定してくれる関数はないのでしょうか?
0780nobodyさん
04/07/06 10:23ID:???print "ぎーーーーーーーーーーーーーーーーーーーーーーーっ" if not $answer - int $answer;
0781777=773
04/07/06 10:33ID:???>>774
なんかムダなソースを読みこんで重くしたくないから、自分で作ってみた。
野暮ったいソースだから、見にくいけど、色々突っ込んでくれるとありがたい。
とりあえず2時間後のGMTを計算するサブルーチン。
ifのとこは上から
処理1.何も繰り上がらず2時間だけプラス
処理2.日、曜、時刻だけ繰り上がり
処理3.処理2+月も繰り上がり
処理4.処理3+年も繰り上がり
一応うるう年は4で割り切れるって部分だけは採用してる。100年とか400年とかは
どうせ生きてないから無視した。
0782777=773
04/07/06 10:39ID:???( my $sec , my $min , my $hour , my $mday , my $mon , my $year , my $wday , my $isdat , my $yday ) = gmtime time;
$year += 1900;
my @wday = qw/Sun Mon Tue Wen Thu Fri Sat Sun/;
my @mon = qw/Jan Feb Mar Apr May Jun Jul Aus Sep Oct Nov Dec Jan/;
my @a = qw/31 28 31 30 31 30 31 31 30 31 30 31/;
if ( !($year % 4) ) { $a[1] += 1 ; }
my @b = qw/00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60/;
my $timer;
if ( $hour < 22 ) {
$hour += 2;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $a[$mon] != $wday ) {
$hour -= 22;
$wday += 1;
$mday += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $mon != 11 ) {
$hour -= 22;
$wday += 1;
$mday -= $a[$mon];
$mon += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} else {
$hour -= 22;
$wday += 1;
$mday -= $a[$mon];
$mon += 1;
$year += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
}return $timer;}
0783nobodyさん
04/07/06 10:41ID:???cookieの有効期限はリミットの2030付近にするのがナウイですよ。
■ このスレッドは過去ログ倉庫に格納されています