acts_as_stripped: auto-stripping HTML from a field
June 14th, 2007
I have been using Err’s acts_as_textiled plugin for making certain fields of an ActiveRecord model always display with textile formatting. It’s smart enough to know that when used in a input field, the data should be displayed unformatted. The nice thing about textiling a field is not worrying about bad HTML polluting your page or attempts at XSS.
Being that the acts_as_textiled plugin saves me from accidentally displaying a field without HTML stripping (like when I forget to use the handy <%=h erb shortcut), I started using it on fields all over the place. Sometimes, where not really appropriate.
For example, let’s say you have a User model and one of the attributes is “display_name”. Now if someone picks a name like “I*am*the*greatest*ever!”, I don’t care that they are using non-alpha-numeric characters. I just don’t want it to show up like “Iamthegreatestever!”
The problem was, I had been relying on acts_as_textiled to save me from bad HTML in that field, so now if I turn it off, someone can make their display_name “Run <script blah blah blah > or something” and I have all these places in my views where I left out the h in <%=h so I’m screwed. I needed another way to strip HTML without using textiled, but I wanted to be able to auto-strip where appropriate by setting up a model the same way acts_as_textiled does.
Enter: acts_as_stripped
From the README:
Strips HTML out of an attribute whenever it's displayed - even if it's in a form
input box/textarea (for the purposes of this plugin, I'm considering HTML evil
in the specified fields, no matter what).
NOTE: no stripping happens when the attribute is written, only read.
NOTE: value is converted to string; so for example if you errantly list an integer
attribute in the attribute list it's going to come back as a string.
Inspired by Err's acts_as_textiled, but I needed some attributes to be displayed
without textile messing with underscores and asterisks.
And I don't trust myself to sanitize HTML in views 100% of the time.
Use like so:
class SomeModel < ActiveRecord::Base
acts_as_stripped :name, :description
# ...
end
If you need to get the unstripped value, you can always use:
your_model.attributes["att_name"]
Install with:
./script/plugin install http://svn.offtheline.net/plugins/acts_as_stripped/
(or just use svn or piston to import into your vendor/plugins directory)
Any feedback? Questions? Criticism? All welcome and appreciated.


Sorry, comments are closed for this article.