この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。
xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法やインストールメモやXREA + tDiary + Namazuをどうぞ。
<Files *.cgi> AddHandler cgi-script .cgi Options +ExecCGI </Files> DirectoryIndex index.cgi RewriteEngine on RewriteBase /~kazu/rewrite/ RewriteRule ^([a-z][^/]+)$ index.cgi/$1
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new("html4")
cgi.out {
cgi.html("PRETTY") {
cgi.table {
ENV.sort.collect do |k,v|
cgi.tr {
cgi.th{ k } + cgi.td{ v }
}
end
}
}
}
深く考えずに書くとこのようなコードになる。ここでは標準添付ライブラリということでcgi.rbの機能を使ってタグをつけたが、他の方法でもかまわない。
さて、このコードのどこにクロスサイトスクリプティング問題があるのかというと、すぐに気がつくのは環境変数の値(v)のところである。しかし、それだけで油断してはいけない。ここで油断してvだけをエスケープするようにしてkの方をエスケープし忘れるとクロスサイトスクリプティング問題が残ってしまう。このような些細な油断がY2K問題を修正したつもりで、新たに本来ならば回避可能なY10K問題を埋め込んでしまうということにつながってしまう。だから、このような考え方は避けて、同じような処理をしているところすべてを見直すようにする必要がある。また、可能ならば同じような処理をしているところは共通化して変更を容易にしておくと、消費税が3%から5%になったときのように、さらに変更が必要になった場合に対応しやすくなる。
クロスサイトスクリプティング問題の対策をしたコードはこのようになる。
#!/usr/bin/ruby -wT
require 'cgi'
cgi = CGI.new("html4")
cgi.out {
cgi.html("PRETTY") {
cgi.table {
ENV.sort.collect do |k,v|
cgi.tr {
cgi.th{ CGI.escapeHTML k } + cgi.td{ CGI.escapeHTML v }
}
end
}
}
}
RWikiはmethod=postじゃないと書き込めないようになっているので、<Limit POST>などでpostのみに認証をかければうまくいくはずです。tokyo.pmはたぶんそうやっていると思います。
Lispなら括弧は…?
「HTML鳩丸倶楽部」更新履歴の2002-04-07でユーザビリ ティやアクセシビリティを向上させるためのJavaScriptの例として紹介されていた。
1.7で動かそうとしたらelem = HtmlElem::new( tag, attrs_to_hash attrs )がparse errorになったのでelem = HtmlElem::new( tag, attrs_to_hash( attrs ) )に変更。同様の変更をいくつか。
ruby自体のconfigureで--program-suffixをつけているとhtml-parserのinstall.rbの呼び出しで違うrubyバイナリを呼び出してこけていたのでsystem( 'ruby install.rb' )からsystem( Config::CONFIG['ruby_install_name'], 'install.rb' )に変更。Config::CONFIG['RUBY_INSTALL_NAME']との違いがわからなかったけど、小文字の方を使ってみた。
TestUnitとの組み合わせだとTestCaseの引数のチェックが厳しいらしく、WebUnit::TestCase::new( 'dummy' ).setupがNameError: undefined method `dummy' for class `WebUnit::TestCase'でこけたのでとりあえずWebUnit::TestCase::new( 'nil?' ).setupに変更。
apt-get source drb wget -N (略)/drb-1.3.6.tar.gz cd drb-1.3.4 uupdate ../drb-1.3.6.tar.gz cd ../drb-1.3.6 cp -a ../drb-1.3.4/lib/drb/cgi_drb.rb lib/drb/ vi debian/changelog (1.3.6-1を1.3.6-0.1に変更。) dpkg-buildpackage -rfakeroot cd .. ls sudo dpkg -i drb_1.3.6-0.1_all.deb
毎週タイプ?
pp.rbはrubyのHEADとshimの中に取り込まれたのにRUBYLIBの関係でroughの方のpp.rbが読み込まれてirb上で使うとnilを返してくれないのが不便だったので、HEAD版とshim/ruby16版を比べてshim/ruby16版は1.6と1.7の両方に対応しているようだったのでroughにコピーしてcommitしてみた。
rubyとshimにいってしまったライブラリはroughに古いのが残ることになってそれを間違って使ってしまうと困ることがありそうなので、安定してしまったものについてはroughから消えてもいいような気がした。
~/ruby-cvs/lib$ ls CVS cvs.rb diff diff.rb rcs rcs.rb tempdir.rb ~/ruby-cvs/lib$ ls CVS Entries Repository Root local.rb parser.rb remote.rb ~/ruby-cvs/lib$ cvs -q up cvs update: in directory cvs: cvs update: cannot open CVS/Entries for reading: No such file or directory cvs update: move away cvs/local.rb; it is in the way C cvs/local.rb cvs update: move away cvs/parser.rb; it is in the way C cvs/parser.rb cvs update: move away cvs/remote.rb; it is in the way C cvs/remote.rb ~/ruby-cvs/lib$
Namazuシステムの構築と活用を立ち読みした時に思いついたアイデアを投げておいたらさくっと入れられていた。
21日に引くことも出来るようにしてみたのをtmpに放置中。置く場所を決めてtmpから移動させないといけないなぁ。
.profileでexecというのをみて現在は以下のようにやってますが、bashは-lではなく--loginなのでbashが選ばれると破綻しそうですが、今のところ唯一そういう環境に該当するcygwinは直接bashが起動されるので問題が起きてません。
/proc/ide/hda/geometryでphysicalとlogicalがあってそれぞれの3つの値をかけた値が違うんですが、どっちが本当のディスク容量なんでしょうか?
文字列だった場合も正規表現にコンパイルされてから使われますが、そのときにKCODEが問題に。文字列にエンコードの情報がつくようになったときにはそのエンコードの正規表現になればよさそう。と思ったけど正規表現と適用しようとした文字列のエンコードが違うとどうなるんだろう?
天泣記をちゃんと読めることが確認できたのはOperaとw3m。だめだったのはMSIE。iCabもだめだったらしい。
HEAD http://cvs.m17n.org/~akr/diary/で見てみたらContent-Encoding: dEflate
のEだけ大文字なのが気になった。
Acceptにdeflateがないときに406 Not Acceptableを返さなくていいんだろうか?
permissionを変更するのはレポジトリを直接いじらないとだめらしいですが、rubyのbenchmark.rbの実行属性をはずしてもらった後、cvs upで実行属性がはずれなかったので一度rm benchmark.rbしてからcvs upすると実行属性がついていないファイルになった。
✑ ただただし [そ、そんな単純なオチだったか〜 >RWiki]
✑ なひ [あくまでもRWiki interfaceのimplementationの1つ(2つ)である rw-cgi.rbおよび..]