Refactor
:my
=>
'code'
Codes
Refactorings
Popular
Best
Submit
Spam
Account
Logout
Login
JavaScript doesn't seem to be activated, expect things to be ugly and sloppy!
More Jobs
Recent
Cheap ruby block templating
Bindings on caller
Initial script execution very slow and skewing results
suppress ERB newlines
Keeping the database clean
Arrays, loops, strings...
Similar virtual attributes and their getters/setter
Check type is XML Serializable
Serena Collage slideshow
Shortest regular expression for matching a subdomain.
Popular
Caching Methods
How to find max, min of three numbers?
Similar virtual attributes and their getters/setter
Shortest regular expression for matching a subdomain.
Arrays, loops, strings...
Cheap ruby block templating
Check type is XML Serializable
Bindings on caller
Apache log file sorting
Tab-Switching in jQuery
Pastable version of
Sanitize HTML
<div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72</pre> <pre class="sunburst"><span style="color:#E28964;">private</span> <span style="color:#E28964;">static</span> Regex _tags = <span style="color:#E28964;">new</span> Regex(<span style="color:#65B042;"><span style="color:#65B042;">"</span><[^>]*(>|$)<span style="color:#65B042;">"</span></span>, RegexOptions.Singleline | RegexOptions.ExplicitCapture | RegexOptions.Compiled); <span style="color:#E28964;">private</span> <span style="color:#E28964;">static</span> Regex _whitelist = <span style="color:#E28964;">new</span> Regex(@<span style="color:#65B042;"><span style="color:#65B042;">"</span></span> <span style="color:#65B042;"> ^</?(a|b(lockquote)?|code|em|h(1|2|3)|i|li|ol|p(re)?|s(ub|up|trong|trike)?|ul)>$</span> <span style="color:#65B042;"> |^<(b|h)r<span style="color:#DDF2A4;">\s</span>?/?>$</span> <span style="color:#65B042;"> |^<a[^>]+>$</span> <span style="color:#65B042;"> |^<img[^>]+/?>$<span style="color:#65B042;">"</span></span>, RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture | RegexOptions.Compiled); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>/ <summary></span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>/ sanitize any potentially dangerous tags from the provided raw HTML input using </span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>/ a whitelist based approach, leaving the "safe" HTML tags</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>/ </summary></span> <span style="color:#E28964;">public</span> <span style="color:#E28964;">static</span> <span style="color:#99CF50;">string</span> Sanitize(<span style="color:#99CF50;">string</span> html) { var tagname = <span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#65B042;">"</span></span>; Match tag; var tags = _tags.Matches(html); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> iterate through all HTML tags in the input</span> <span style="color:#E28964;">for</span> (<span style="color:#99CF50;">int</span> i = tags.Count-<span style="color:#3387CC;">1</span>; i > -<span style="color:#3387CC;">1</span>; i--) { tag = tags[i]; tagname = tag.Value.ToLower(); <span style="color:#E28964;">if</span> (!_whitelist.IsMatch(tagname)) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> not on our whitelist? I SAY GOOD DAY TO YOU, SIR. GOOD DAY!</span> html = html.Remove(tag.Index, tag.Length); } <span style="color:#E28964;">else</span> <span style="color:#E28964;">if</span> (tagname.StartsWith(<span style="color:#65B042;"><span style="color:#65B042;">"</span><a<span style="color:#65B042;">"</span></span>)) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> detailed <a> tag checking</span> <span style="color:#E28964;">if</span> (!IsMatch(tagname, @<span style="color:#65B042;"><span style="color:#65B042;">"</span><a<span style="color:#DDF2A4;">\s</span></span> <span style="color:#65B042;"> href=<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>(<span style="color:#DDF2A4;">\#</span><span style="color:#DDF2A4;">\d</span>+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span></span> <span style="color:#65B042;"> (<span style="color:#DDF2A4;">\s</span>title=<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>[^<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>]+<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>)?<span style="color:#DDF2A4;">\s</span>?><span style="color:#65B042;">"</span></span>)) { html = html.Remove(tag.Index, tag.Length); } } <span style="color:#E28964;">else</span> <span style="color:#E28964;">if</span> (tagname.StartsWith(<span style="color:#65B042;"><span style="color:#65B042;">"</span><img<span style="color:#65B042;">"</span></span>)) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> detailed <img> tag checking</span> <span style="color:#E28964;">if</span> (!IsMatch(tagname, @<span style="color:#65B042;"><span style="color:#65B042;">"</span><img<span style="color:#DDF2A4;">\s</span></span> <span style="color:#65B042;"> src=<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span></span> <span style="color:#65B042;"> (<span style="color:#DDF2A4;">\s</span>width=<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\d</span>{1,3}<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>)?</span> <span style="color:#65B042;"> (<span style="color:#DDF2A4;">\s</span>height=<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\d</span>{1,3}<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>)?</span> <span style="color:#65B042;"> (<span style="color:#DDF2A4;">\s</span>alt=<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>[^<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>]*<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>)?</span> <span style="color:#65B042;"> (<span style="color:#DDF2A4;">\s</span>title=<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>[^<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>]*<span style="color:#65B042;">"</span></span><span style="color:#65B042;"><span style="color:#65B042;">"</span>)?</span> <span style="color:#65B042;"> <span style="color:#DDF2A4;">\s</span>?/?><span style="color:#65B042;">"</span></span>)) { html = html.Remove(tag.Index, tag.Length); } } } <span style="color:#E28964;">return</span> html; } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>/ <summary></span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>/ Utility function to match a regex pattern: case, whitespace, and line insensitive</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>/ </summary></span> <span style="color:#E28964;">private</span> <span style="color:#E28964;">static</span> <span style="color:#99CF50;">bool</span> IsMatch(<span style="color:#99CF50;">string</span> s, <span style="color:#99CF50;">string</span> pattern) { <span style="color:#E28964;">return</span> Regex.IsMatch(s, pattern, RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture); } </pre> </div> </div> <a href="http://refactormycode.com/codes/333-sanitize-html" style="color:#fff" title="As seen on RefactorMyCode.com"><img alt="Small_logo" src="http://refactormycode.com/images/small_logo.gif" style="border:0" /></a>