Plugin: htmlscrubber
Author: Joey
Included in ikiwiki: yes
Enabled by default: yes
Included in goodstuff: no
Currently enabled: yes
This plugin is enabled by default. It sanitizes the html on pages it renders to avoid XSS attacks and the like.
It excludes all html tags and attributes except for those that are
whitelisted using the same lists as used by Mark Pilgrim's Universal Feed
Parser, documented at
http://web.archive.org/web/20110726052341/http://feedparser.org/docs/html-sanitization.html.
Notably it strips style
and link
tags, and the style
attribute.
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.
It uses the HTML::Scrubber perl module to perform its html sanitisation, and this perl module also deals with various entity encoding tricks.
While I believe that this makes ikiwiki as resistant to malicious html 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 in ikiwiki's GPL license.
The web's security model is fundamentally broken; ikiwiki's html sanitisation is only a patch on the underlying gaping hole that is your web browser.
Note that enabling or disabling the htmlscrubber plugin also affects some other HTML-related functionality, such as whether meta allows potentially unsafe HTML tags.
The htmlscrubber_skip
configuration setting can be used to skip scrubbing
of some pages. Set it to a PageSpec, such as
posts/* and !comment(*) and !*/Discussion
, and pages matching that can have
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.
Some examples of embedded javascript that won't be let through when this plugin is active:
- script tag test
- CSS script test
- entity-encoded CSS script test
- entity-encoded CSS script test
- click me