link_to ... :method => :delete のCSRF
Rails 1.2 までの link_to って、:method => :delete の時、CSRF の危険があるよね。なもんで、security_extension プラグインを入れた上で、app/helper/application.rb に、
def delete_link_to(str, options = {}, html_options = nil, *parameters_for_method_reference) %Q|<a onclick="if (confirm('#{html_options[:confirm]}')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'session_id_validation'); s.setAttribute('value', '#{security_token}'); f.appendChild(s); f.submit(); }; return false;" href="#{url_for(options)}">#{str}</a>| end
なんてコードを書いて使って対処していたんだけど、Rails2.0 PR のコード見たらちゃんと対策されたコードが入っていた。エロイ。actionpack/lib/action_controller/request_forgery_protection.rb あたり。