ruby-lang.orgより、REXMLの脆弱性に関する報告がありました。

REXMLのDoS脆弱性

RailsでXMLリクエストのパースに使用されているREXMLに、DoS脆弱性が発見されました。XML entity explosion attackと呼ばれる攻撃手法により、ユーザから与えられたXMLを解析するようなアプリケーションをサービス不能(DoS)状態にすることができます。大部分のRailsアプリケーションはこの攻撃に対して脆弱です。

問題に対処するためのGemがリリースされているようなので、 以下のように対処しました。

  1. Gemをインストール
       1  # gem install rexml-expansion-fix
    
  2. ライブラリを読み込む
       1  require 'rexml-expansion-fix'
    

また、RailsのPlugin Gemとして機能するものも作ってみました。

genki-rexml-expansion-fix

Gemをインストールした後、以下のようにconfig/environment.rb似記述します。

   1  config.gem 'genki-rexml-expansion-fix',
   2      :lib => 'rexml-expansion-fix',
   3      :source => 'http://gems.github.com'

See Also

posted by Png genki on Mon 25 Aug 2008 at 07:18 with 2 comments

http://www.ipetitions.com/petition/iPhoneNDA/index.html

オンラインで請願書にサインできます。名前とemailが必須です。
すでに300人以上の人が参加しています。

賛同される方はぜひ。

posted by Png satoko on Mon 25 Aug 2008 at 07:16

Formulaは、数式や化学構造式をブログに貼り付けて共有するサービスです。

このたび、出力形式が透過PNGになりました。 以下のように、背景色が白以外の環境でもお使いいただけます。

ブラウザがIE6の場合、透過PNGを正しく扱えないため、 従来の非透過PNGと同様の出力となります。 IEPNGFix 2等を使うことで、IE6でも透過PNGを扱えるようになるようです。

今後の方向性としましては、

  • 黒背景用の白文字画像の生成
  • JavaScriptが利用不可能な環境で、IE6でも利用できるようにするために任意の背景色と前景色を指定して非透過PNGを生成する

等を予定しております。 今後ともよろしくお願いいたします。

posted by Png genki on Mon 25 Aug 2008 at 03:19

タスクバーボタンのまとまりを防ぐの記事に載せた画像のコピーの仕方のご紹介です。

まずは、「Paint.NET」をダウンロードします。 ダウンロードしなくても画像のコピーはできますが、できることが多くなります。

ウインドウを開いて、表示したい画像状態にします。
Alt」キーと「Prt Sc」キーを同時に押します。
何でも良いので、画像ファイルを開きます。
下方にある「このプログラムを閉じ、編集用の画像を開く」または「Ctrl」キーと「E」キーを同時に押します。
Paintが起動されるので、「編集」から「貼り付け」をします。
ツール」が左に表示されているので、最上段の左をクリックします。
四角の範囲で選択ができるようになるので、必要な部分を選択します。
「編集」で「切り取り」または「コピー」をします。
ファイル」から「新規」を選ぶと、切り取った大きさの白い四角が表示されているので、「編集」から「貼り付け」をします。
「名前をつけて保存」をしますが、ファイルの種類は「png」が良いようです。
「構成の保存」のウインドウが表示されるので「OK」を押します。 「Paint」を終了させて、ブログの投稿ページの「参照」からファイルを選び「Upload」をクリックします。
本文の一番最後に画像のタグが表示されているので、画像を表示させたい場所にタグを移して「Post」します。

posted by Png mari on Sun 24 Aug 2008 at 16:23

http://www.kdedevelopers.org/node/3623

NokiaのN810で、Rubyを動かそうとした人の話です。yak shavingです、まさに。

訳そうかと思ったんですけども、私には詳細が理解できないことも多いので紹介だけにしておきます。
N810ってLinuxが入っていて、「デスクトップ用のものに近く、わりと簡単に(場合によってはコンパイルし直す程度で)、Linux用のアプリケーションを動かすことができる」んですね。

ノウハウが詰まったページがいっぱいリンクされているようなので、ケータイhackするぜってときはいいかもしれません。
こうやって勢いでいろいろやってのけれる力ってすごいですね。私もがんばらねば。

Refs

http://pc.watch.impress.co.jp/docs/2008/0325/pda78.htm

posted by Png satoko on Sun 24 Aug 2008 at 00:35

Capistrano-2.1を使って、Gitリポジトリからデプロイする為のレシピファイルの書き方のメモです。

config/deploy.rb

   1  set :application, "goodstuff"
   2  set :scm,         :git
   3  set :repository,  "git.foo.com:/path/to/#{application}.git"
   4  set :branch,      'master'
   5  set :deploy_via,  :copy
   6  set :deploy_to,   "/mnt/app/#{application}"
   7  set :user,        "app"
   8    (--snip--)

/path/to/goodstuff.gitがベアリポジトリだと仮定しています。 :branch:deploy_viaを指定しているところがポイントでしょうか。 後は

   1  % cap deploy

するだけ。

posted by Png genki on Sat 23 Aug 2008 at 01:58 with 1 comment

Amazon EBSを使う方法のメモ。

Elasticfox拡張 を使い、 EBSボリュームを作成し、適当なインスタンスにアタッチする。 仮にここでは、/dev/sdhにアタッチしたとする。

その後、ボリュームをアタッチしたインスタンスにSSHでログインし、 以下のコマンドでボリューム上にファイルシステムを構築する。

   1  # yes | mkfs -t ext3 /dev/sdh

続いて、適当なディレクトリを作成し、マウントする

   1  # mkdir /mnt/foo
   2  # mount /dev/sdh /mnt/foo

後は普通に/mnt/fooにアクセスすればOk。

See Also

posted by Png genki on Fri 22 Aug 2008 at 21:46

色々奥が深いと思った(not http://0xcc.net/misc/bad-knowhow.html 笑)

■前提:記事←関連テーブル→ユーザというモデル関係がある。

   1  # has_many :throughのパターン
   2  class Article< ActiveRecord::Base
   3    has_many :articles_users
   4    has_many :users, :through => :articles_users
   5  end
   6  
   7  class User < ActiveRecord::Base
   8    has_many :articles_users, :dependent => :destroy
   9    has_many :articles, :through => :articles_users
  10  end
  11  
  12  # 関連テーブルを実テーブルで持つ
  13  class ArticlesUsers < ActiveRecord::Base
  14    belongs_to :article
  15    belongs_to :user
  16  end

■関連テーブルの操作

あるユーザの関連をごそっと別の関連に切り替えたいような場合!

User.articles_users.destroy_allして作り直すという方法もあるが User.articles_users.replace()という便利なメソッドがある。

AWD第二版(AgileWebDevelopment)で言うとP308。 「○orders.replace(order1,...) この顧客に関連付けられた注文のセットを、新しいセットに置き換える。現在の子のセットと新しいセットの違いを検出し、それに応じてデータベースの変更を最適化する。」という奴。

   1   /ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/associations/association_collection.rb
   2  
   3        # Replace this collection with +other_array+
   4        # This will perform a diff and delete/add only records that have changed.
   5        def replace(other_array)
   6          other_array.each { |val| raise_on_type_mismatch(val) }
   7  
   8          load_target
   9          other   = other_array.size < 100 ? other_array : other_array.to_set
  10          current = @target.size < 100 ? @target : @target.to_set
  11  
  12          @owner.transaction do
  13            delete(@target.select { |v| !other.include?(v) })
  14            concat(other_array.select { |v| !current.include?(v) })
  15          end
  16        end
これは便利。

1.配列を放り込むだけ

「Replace this collection with +other_array+」ということで検索結果、あるいはセッションなどで生成した新しい関連の配列を放り込むだけで使える。

2.以前の関連との差分をチェックして差分だけ反映してくれる。

「This will perform a diff and delete/add only records that have changed.」ということで必要な差分だけチェックして必要なdelete/addをしてくれる。

ちなみにdeleteだと「Railsレシピブック」のP157「Entryオブジェクトobjectとの関連を削除する。Entryオブジェクトobjectの外部キー(blog_id)をNULLにし、関連を削除する。複数の参照元オブジェクトを同時に指定できる。」にある通り、関連テーブルの実レコードは削除されない(外部キーがNULLになるだけ)。関連テーブルにごみが残って気持ち悪い場合は上記モデルのように「:dependent => :destroy」を付けると物理的に削除される。

posted by Face ysakaki on Fri 22 Aug 2008 at 15:54

   1  def shotening(str)
   2    return str[0..0] + str[1..-2].gsub!(/\s/,"").size.to_s + str[-1..-1]
   3  end
   4  
   5  str = "something new and exciting"
   6  
   7  shotening(str)    #=> "s21g"

ってことなんですかね?

posted by Png y_tsuda on Fri 22 Aug 2008 at 13:59 with 2 comments

最近全然JavaScriptを書いていなかったので、少し書いてみる。

お題は、どう書く.org - LL Golf Hole 6 - 10進数を2進数に基数変換する です。

ブックマークレットにしてみた。

   1  javascript: n=window.prompt("10進数を入力すると、2進数にしてくれるよ!",  ""); alert(parseInt(n, 10).toString(2));

上のコードをアドレスバーに貼り付ければ実行できます。

コードの内容は、

  1. window.promptで数字を得る。(これは文字列)
  2. parseInt(n, 10)で、さっき得た文字列を数値(10進数)に変換
  3. 得た数値を2進数(文字列)に変換
  4. 表示

文字列を1度、数値に変換しないといけないのが少し気にいらないなぁ。

何かいい方法があるだろうか。

posted by Png y_tsuda on Fri 22 Aug 2008 at 11:41