おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google してもらう


2003年05月22日(Thu) ちょっとずつ暖かくなってきたか [同日]

柳の種がとびまくり

[Ruby] 続「^」「$」を安易に使うべきではない委員会

ruby-talkより、「^」や「$」を、CGIで入力文字列のチェックに安易に使うとセキュリティホールになり得るんだ。なるほどー。気をつけよう。

[Ruby] Ruby拡張ライブラリの作り方

ruby-talkより。strfmon(3)をそのうち…。

ある無料サイトでRubyを動かそうとする

perlとshしかないサイトでRubyを動かそうとしてみました。 結局のところ失敗なのですが、その結果得られたバッドノウハウをいくつか。

そこのOSに合ったバイナリパッケージをいただいてきて解凍、 rubyのコマンド(バイナリ)やライブラリを、 適当にcgi-binディレクトリ以下に配置しました。

必要なRubyライブラリは、手元のホストで以下をhttpdから実行して、 その次のスクリプトで抽出しました。

#!/bin/sh

echo Content-type: text/plain
echo
strace ./index.rb 2>&1
#!/usr/bin/ruby

r = []
ARGF.each do |l|
	if %r|^open\("(/usr/lib/ruby/.*?)"| =~ l then
		r << $1
	end
end
puts r.uniq.join( "\n" )

cgiプログラムもcgi-bin以下に配置して、 そのサイトでは拡張子.cgi以外のcgiプログラムは禁じられていたので、 以下のような感じのラッパーを作成。

perlの行は、ロードバランサの配分によってrubyの実行できないホストで cgiが実行された時のいいわけを出力します。

環境変数RUBYLIBは、$SAFE=0の時に、ライブラリの検索パスに追加するパス(RubyCentral/Wayback Machine)です。 これは便利なこともあるかも。

#!/usr/bin/sh

RUBYLIB=`pwd`/lib/ruby; export RUBYLIB
./ruby -e '' 2>/dev/null || /usr/local/bin/perl -e 'print("Content-type: text/html\n\n<html><title>Server side problem</title><body><p align=center>すみません。少し時間をおいてやりなおしてみてください:'$SERVER_NAME'</p></body></html>\n");'
./ruby ./index.rb 2>/dev/null

で、結局、生成されるべきHTMLの最初の方は見えたんですけど。 試したホストでは、シェルのバッファの大きさが制限されているようで、 上の方法では出力が最後まで出てきませんでした。残念。 ロードバランサによってRubyの実行できないホストに、 かなりの確率で当たっちゃうのも残念。

たまの頭の体操ということで。 今回のホストの利用規約には違反してないはずですが、試されるかたはご注意を。

子うさぎ

帰りがけに子うさぎが道をよこぎっていった。かわいいのう。


作り手とその取り巻きだけが楽しんでる間は本物じゃない。その中身が理解できない人々の生活を変えてこそ本物だ


zunda <zunda at freeshell.org>