2008-07-21 13:31:57 +02:00
|
|
|
[[!template id=plugin name=htmlscrubber core=1 author="[[Joey]]"]]
|
|
|
|
[[!tag type/html]]
|
2006-08-23 07:41:07 +02:00
|
|
|
|
2006-05-05 07:41:11 +02:00
|
|
|
This plugin is enabled by default. It sanitizes the html on pages it renders
|
|
|
|
to avoid XSS attacks and the like.
|
2006-04-25 05:18:21 +02:00
|
|
|
|
2006-05-05 07:41:11 +02:00
|
|
|
It excludes all html tags and attributes except for those that are
|
2006-04-25 05:18:21 +02:00
|
|
|
whitelisted using the same lists as used by Mark Pilgrim's Universal Feed
|
2011-10-31 20:33:30 +01:00
|
|
|
Parser, documented at
|
|
|
|
<http://web.archive.org/web/20110726052341/http://feedparser.org/docs/html-sanitization.html>.
|
2007-07-11 19:57:02 +02:00
|
|
|
Notably it strips `style` and `link` tags, and the `style` attribute.
|
2006-04-25 05:18:21 +02:00
|
|
|
|
2011-12-29 16:35:41 +01:00
|
|
|
Any attributes that could be used to specify a URL are checked to ensure
|
|
|
|
that they are known, safe schemes. It will also block embedded javascript
|
|
|
|
in such URLs.
|
2008-02-10 23:27:59 +01:00
|
|
|
|
2008-07-21 13:31:57 +02:00
|
|
|
It uses the [[!cpan HTML::Scrubber]] perl module to perform its html
|
2006-04-25 05:18:21 +02:00
|
|
|
sanitisation, and this perl module also deals with various entity encoding
|
|
|
|
tricks.
|
|
|
|
|
2006-04-25 05:23:49 +02:00
|
|
|
While I believe that this makes ikiwiki as resistant to malicious html
|
2006-04-25 05:18:21 +02:00
|
|
|
content as anything else on the web, I cannot guarantee that it will
|
|
|
|
actually protect every user of every browser from every browser security
|
|
|
|
hole, badly designed feature, etc. I can provide NO WARRANTY, like it says
|
2007-04-06 19:34:35 +02:00
|
|
|
in ikiwiki's [[GPL]] license.
|
2006-04-25 05:18:21 +02:00
|
|
|
|
2006-04-25 05:23:26 +02:00
|
|
|
The web's security model is *fundamentally broken*; ikiwiki's html
|
2006-04-25 05:18:21 +02:00
|
|
|
sanitisation is only a patch on the underlying gaping hole that is your web
|
|
|
|
browser.
|
|
|
|
|
2008-02-10 23:27:59 +01:00
|
|
|
Note that enabling or disabling the htmlscrubber plugin also affects some
|
|
|
|
other HTML-related functionality, such as whether [[meta]] allows
|
|
|
|
potentially unsafe HTML tags.
|
2007-03-26 23:39:18 +02:00
|
|
|
|
2008-09-27 00:05:36 +02:00
|
|
|
The `htmlscrubber_skip` configuration setting can be used to skip scrubbing
|
2010-11-12 05:24:33 +01:00
|
|
|
of some pages. Set it to a [[ikiwiki/PageSpec]], such as
|
2011-10-20 23:29:30 +02:00
|
|
|
`posts/* and !comment(*) and !*/Discussion`, and pages matching that can have
|
2010-11-12 05:24:33 +01:00
|
|
|
all the evil CSS, JavsScript, and unsafe html elements you like. One safe
|
|
|
|
way to use this is to use [[lockedit]] to lock those pages, so only admins
|
|
|
|
can edit them.
|
2008-09-27 00:05:36 +02:00
|
|
|
|
2006-04-25 05:18:21 +02:00
|
|
|
----
|
|
|
|
|
2006-05-05 07:41:11 +02:00
|
|
|
Some examples of embedded javascript that won't be let through when this
|
|
|
|
plugin is active:
|
2006-04-25 05:18:21 +02:00
|
|
|
|
2007-05-08 22:55:43 +02:00
|
|
|
* script tag test <script>window.location='http://example.org';</script>
|
|
|
|
* <span style="background: url(javascript:window.location='http://example.org/')">CSS script test</span>
|
|
|
|
* <span style="any: expression(window.location='http://example.org/')">entity-encoded CSS script test</span>
|
|
|
|
* <span style="any: expression(window.location='http://example.org/')">entity-encoded CSS script test</span>
|
2008-02-10 19:16:40 +01:00
|
|
|
* <a href="javascript:alert('foo')">click me</a>
|