Two months with Ruby on Rails. Good rant—covers both the good and the bad. The first complaint is the lack of XSS protection by default in the template language. Django has the same problem, but the solution was 90% there when I saw Malcolm at OSCON.
We've been using the same solution in WordPress for about 18 months. We use a token that is unique to the install, the user, the action, the object of the action, and a 12 hour time period (so the token expires). I'm not aware of any other way to solve the problem (i.e. that doesn't require some sort of token that is checked when you perform the action).
XSS protection by default would mean things like
<%= link_to ... %>
or
<%= render :partial... %>
Would need to be 'unescaped' or have a special insert syntax.
I'd find that worse than the 1 char you have to type at present.
Koz: not if it was a clever implementation. Those two tags would have to be altered to mark the HTML they returned as "already escaped". Take a look at the Django proposal to see how we're handling it: http://code.djangoproject.com/wiki/AutoEscaping