]> sipb.mit.edu Git - ikiwiki.git/commitdiff
* Allow simple alphanumeric style attribute values in the htmlscrubber. This
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Wed, 11 Jul 2007 16:50:59 +0000 (16:50 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Wed, 11 Jul 2007 16:50:59 +0000 (16:50 +0000)
  should be safe from javascript attacks.

IkiWiki/Plugin/htmlscrubber.pm
debian/changelog
doc/plugins/htmlscrubber.mdwn
po/ikiwiki.pot

index c5b08f60435b8b37ffb0b75732cfe92a8a6980ad..489827167101ebcd2445d6936a8a80a065086adb 100644 (file)
@@ -31,21 +31,26 @@ sub scrubber { #{{{
                        span strike strong sub sup table tbody td textarea
                        tfoot th thead tr tt u ul var
                }],
                        span strike strong sub sup table tbody td textarea
                        tfoot th thead tr tt u ul var
                }],
-               default => [undef, { map { $_ => 1 } qw{
-                       abbr accept accept-charset accesskey action
-                       align alt axis border cellpadding cellspacing
-                       char charoff charset checked cite class
-                       clear cols colspan color compact coords
-                       datetime dir disabled enctype for frame
-                       headers height href hreflang hspace id ismap
-                       label lang longdesc maxlength media method
-                       multiple name nohref noshade nowrap prompt
-                       readonly rel rev rows rowspan rules scope
-                       selected shape size span src start summary
-                       tabindex target title type usemap valign
-                       value vspace width
-               }, "/" => 1, # emit proper <hr /> XHTML
-               }],
+               default => [undef, { (
+                       map { $_ => 1 } qw{
+                               abbr accept accept-charset accesskey action
+                               align alt axis border cellpadding cellspacing
+                               char charoff charset checked cite class
+                               clear cols colspan color compact coords
+                               datetime dir disabled enctype for frame
+                               headers height href hreflang hspace id ismap
+                               label lang longdesc maxlength media method
+                               multiple name nohref noshade nowrap prompt
+                               readonly rel rev rows rowspan rules scope
+                               selected shape size span src start summary
+                               tabindex target title type usemap valign
+                               value vspace width
+                       } ),
+                       "/" => 1, # emit proper <hr /> XHTML
+                       "style" => qr{^[-a-zA-Z0-9]+$}, # only very simple
+                                                       # references allowed,
+                                                       # to avoid javascript
+                       }],
        );
        return $_scrubber;
 } # }}}
        );
        return $_scrubber;
 } # }}}
index 7c1625a415b9adfb2baa16a5f0ca55714d5bf652..e1bcc3185b58a5c480a38f2d895a0992fb273c36 100644 (file)
@@ -7,8 +7,10 @@ ikiwiki (2.4) UNRELEASED; urgency=low
   * Support building on systems that lack asprintf.
   * mercurial getctime is currently broken, apparently by some change in
     mercurial version 0.9.4. Turn the failing test case into a TODO test case.
   * Support building on systems that lack asprintf.
   * mercurial getctime is currently broken, apparently by some change in
     mercurial version 0.9.4. Turn the failing test case into a TODO test case.
+  * Allow simple alphanumeric style attribute values in the htmlscrubber. This
+    should be safe from javascript attacks.
 
 
- -- Joey Hess <joeyh@debian.org>  Sun, 08 Jul 2007 20:25:00 -0400
+ -- Joey Hess <joeyh@debian.org>  Wed, 11 Jul 2007 12:23:41 -0400
 
 ikiwiki (2.3) unstable; urgency=low
 
 
 ikiwiki (2.3) unstable; urgency=low
 
index 7962b3b52f9b7b667f1dc5a3f67d53e19ca5b10c..cc749e2dc8b3619e9f7739c1613624f356282c52 100644 (file)
@@ -7,7 +7,12 @@ 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://feedparser.org/docs/html-sanitization.html>.
 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://feedparser.org/docs/html-sanitization.html>.
-Notably it strips `style`, `link`, and the `style` attribute.
+Notably it strips `style` and `link`.
+
+For the `style` attribute, it varys slightly from the Universal Feed
+Parser, accepting simple alphanumeric style attributes (style="foo"), but
+stripping anything more complex to avoid any of the ways to insert
+JavaScript via style attributes.
 
 It uses the [[cpan HTML::Scrubber]] perl module to perform its html
 sanitisation, and this perl module also deals with various entity encoding
 
 It uses the [[cpan HTML::Scrubber]] perl module to perform its html
 sanitisation, and this perl module also deals with various entity encoding
@@ -36,3 +41,4 @@ plugin is active:
 * <span style="background: url(javascript:window.location='http://example.org/')">CSS script test</span>
 * <span style="&#x61;&#x6e;&#x79;&#x3a;&#x20;&#x65;&#x78;&#x70;&#x72;&#x65;&#x73;&#x73;&#x69;&#x6f;&#x6e;&#x28;&#x77;&#x69;&#x6e;&#x64;&#x6f;&#x77;&#x2e;&#x6c;&#x6f;&#x63;&#x61;&#x74;&#x69;&#x6f;&#x6e;&#x3d;&#x27;&#x68;&#x74;&#x74;&#x70;&#x3a;&#x2f;&#x2f;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x6f;&#x72;&#x67;&#x2f;&#x27;&#x29;">entity-encoded CSS script test</span>
 * <span style="&#97;&#110;&#121;&#58;&#32;&#101;&#120;&#112;&#114;&#101;&#115;&#115;&#105;&#111;&#110;&#40;&#119;&#105;&#110;&#100;&#111;&#119;&#46;&#108;&#111;&#99;&#97;&#116;&#105;&#111;&#110;&#61;&#39;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;&#47;&#39;&#41;">entity-encoded CSS script test</span>
 * <span style="background: url(javascript:window.location='http://example.org/')">CSS script test</span>
 * <span style="&#x61;&#x6e;&#x79;&#x3a;&#x20;&#x65;&#x78;&#x70;&#x72;&#x65;&#x73;&#x73;&#x69;&#x6f;&#x6e;&#x28;&#x77;&#x69;&#x6e;&#x64;&#x6f;&#x77;&#x2e;&#x6c;&#x6f;&#x63;&#x61;&#x74;&#x69;&#x6f;&#x6e;&#x3d;&#x27;&#x68;&#x74;&#x74;&#x70;&#x3a;&#x2f;&#x2f;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x6f;&#x72;&#x67;&#x2f;&#x27;&#x29;">entity-encoded CSS script test</span>
 * <span style="&#97;&#110;&#121;&#58;&#32;&#101;&#120;&#112;&#114;&#101;&#115;&#115;&#105;&#111;&#110;&#40;&#119;&#105;&#110;&#100;&#111;&#119;&#46;&#108;&#111;&#99;&#97;&#116;&#105;&#111;&#110;&#61;&#39;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#111;&#114;&#103;&#47;&#39;&#41;">entity-encoded CSS script test</span>
+* <span style="pretty">OTOH, this is ok, and will be accepted</a>
index 1b86f0708c018c900258d23c2789cb6df0415855..d70864ed20dc997193ada9b304dfafa612067ba8 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-07-08 20:26-0400\n"
+"POT-Creation-Date: 2007-07-11 12:49-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"