1 [[template id=plugin name=htmlscrubber core=1 author="[[Joey]]"]]
4 This plugin is enabled by default. It sanitizes the html on pages it renders
5 to avoid XSS attacks and the like.
7 It excludes all html tags and attributes except for those that are
8 whitelisted using the same lists as used by Mark Pilgrim's Universal Feed
9 Parser, documented at <http://feedparser.org/docs/html-sanitization.html>.
10 Notably it strips `style` and `link`.
12 For the `style` attribute, it varys slightly from the Universal Feed
13 Parser, accepting simple alphanumeric style attributes (style="foo"), but
14 stripping anything more complex to avoid any of the ways to insert
15 JavaScript via style attributes.
17 It uses the [[cpan HTML::Scrubber]] perl module to perform its html
18 sanitisation, and this perl module also deals with various entity encoding
21 While I believe that this makes ikiwiki as resistant to malicious html
22 content as anything else on the web, I cannot guarantee that it will
23 actually protect every user of every browser from every browser security
24 hole, badly designed feature, etc. I can provide NO WARRANTY, like it says
25 in ikiwiki's [[GPL]] license.
27 The web's security model is *fundamentally broken*; ikiwiki's html
28 sanitisation is only a patch on the underlying gaping hole that is your web
31 Note that enabling or disabling the htmlscrubber plugin also affects some other
32 HTML-related functionality, such as whether [[meta]] allows potentially unsafe
37 Some examples of embedded javascript that won't be let through when this
40 * script tag test <script>window.location='http://example.org';</script>
41 * <span style="background: url(javascript:window.location='http://example.org/')">CSS script test</span>
42 * <span style="any: expression(window.location='http://example.org/')">entity-encoded CSS script test</span>
43 * <span style="any: expression(window.location='http://example.org/')">entity-encoded CSS script test</span>
44 * <span style="pretty">OTOH, this is ok, and will be accepted</a>