what to use for sanitize?

Hi, i'm allowing users to upload html stuff, what can i use to sanitize it? h() it's not good as it escape everything, and i've found that the rails sanitize() is too strict, it sanitize also css style attributes, so users cannot personalize their html... i'd like something which permit to include code like youtubbbe embedded, css styles (only inline, not by external link), which strip stuff like html, head and keep just the body, and all the script tags or btw everything which could cause xss and other problems... what do you suggest?

Good luck with that - it's not (in general) possible to do this. Even if you kill off all the scripting, with some CSS knowledge, a malicious user could make a fake login page and phish people.

Little things like IE6 and 7's support of javascript in CSS attributes could also cause trouble...

--Matt Jones

You can customize Rail's builtin sanitation by setting config.action_view.sanitized_allowed_tags and such in your environment.rb:

config.action_view.sanitized_allowed_tags %w[ list of additional html tags to allow ]

You can do the similar with config.action_view.sanitized_allowed_attributes, sanitized_allowed_css_properties, and sanitized_allowed_css_keywords. However, this is 1) fairly inflexible, as it affects the operation of all sanitize() calls, and 2) sanitize uses Ruby Tokenizer, which is slow. You might be better off looking into the Hpricot based Sanitize gem (Sanitize: A whitelist-based Ruby HTML sanitizer - wonko.com); however I myself haven't yet used it, and it looks like its only geared toward HTML so I don't know if it's able to sanitize css attributes.