blog.sowatchasayin

Rails etc.

XSS怖い、全部マークアップ外す。

XSS怖いですね。
Webのセキュリティ努力のゴールにあるのは「絶望」のみ

ということで遊びで作ってるRailsアプリもちゃんと対策しようと思いました。

で、Safe ERBを入れようとすると。。。
mongrelだと使えない。わざわざWebrickを使うのもメンドウなんです。

探してみたらお便利プラグインありました。
入れただけで、勝手にマークアップをはずします。何もしないでOK。すばらしい。
TechCrunchで挙がっていた例のこいつ
'<script>alert('y0');</script>'

が、こう
'alert('y0');'

なります。

設定すれば一部のカラムだけ除外とかもできるみたいです。リッチなテキストにしたくなったら、そうします。
xss_terminate

ここで見つけました。
Auto-escaping HTML with Rails

AJAXなアクションでflashがついてこない

僕はRailsのflashが好きです。理由はありません。

しかし、こいつ、Ajaxのアクションに対してはうまく動作してくれない。
普通のhttpだとページ遷移すると消えてくれるのですが、どうやらxhrだとそこの片付けをしてくれません。何ということだ…。

なので、下記を参考にがんばって非同期に更新できるようにしました。
Rails Flash with Ajax
flashの部分をpartialに切り出して、毎回page.replace_htmlしてあげる戦略です。

書いてある通りにやろうとしたらダメだった。
ヘルパーにちゃんとpageオブジェクトを渡してあげる。

module ApplicationHelper
~~~~~
def reload_flash(page)
page.replace_html 'flash', :partial => 'layouts/flash'
flash.discard
end
~~~~
end


ちなみにビューのremote_form_forでupdate_pageしようとしたらダメだった。
コントローラを通る前のflashパーシャルをrenderしても、flashに何も入ってないから意味ないし。

配列おまとめyield

def お徳用(商品)
  return if 商品.length == 0
  if 商品.length >6
    [商品[0..5]] + お徳用(商品[6..商品.length])
  else
    [商品[0..5]]
  end
end

これを読んでおいてよかった。と思った瞬間。
(とはいえ、まだ全部読んでない)
The Little Schemer, 4th EditionThe Little Schemer, 4th Edition

The MIT Press 1995-12-21
売り上げランキング : 3390

Amazonで詳しく見る
by G-Tools


できた!と思ったら、each_sliceなんてものがあるのか…

traps in a sandbox

Lessons learnt the hard way: Don't use script/console --sandbox on production apps
It also commits implicit commit like ALTER TABLE. just get fucked now.

script/console --sandboxでALTER TABLEとかすると、その前の変更がコミットされちゃいます。くそ!

乗組員。

Debian Lenny + Rails2.3.3 + Passenger2.2.4で、デプロイしたっす。
「とりあえずやってよう」と思いやってみたら、特に何の問題もなく、あっという間に配備できました。
インストール後、
# passenger-install-apache2-module
で対話的に進みます。

参考:
Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用

Rails Cheetsheets

Railsで何かするとなると大体googleでサンプルコードを見ることになる。
だって覚えられないんだもん。

ということでチートシート。うーん便利。助かる。
Ruby on Rails > Cheatsheets

ドsudo

なまえ ALL=(ALL) NOPASSWD: ALL
# Uncomment to allow members of group sudo to not need a password
# (Note that later entries override this, so you might need to move
# it further down)
# %sudo ALL=NOPASSWD: ALL

でOK

Author

Fujimura Daisuke
http://fujimuradaisuke.com

Labels