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?
on 2009-05-12 13:53
on 2009-05-12 18:38
on 2009-05-12 21:44
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 (http://wonko.com/post/sanitize); 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.