]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
* meta: Check that the urls provided for authorurl, permalink, and openid
authorJoey Hess <joey@kodama.kitenet.net>
Sun, 10 Feb 2008 22:17:44 +0000 (17:17 -0500)
committerJoey Hess <joey@kodama.kitenet.net>
Sun, 10 Feb 2008 23:51:07 +0000 (18:51 -0500)
  are safe and can't contain javascript.

IkiWiki/Plugin/meta.pm
debian/changelog

index 621e876741b288466112360b96290bac01235e52..74b630afc27c5c355973ba5aa6bb398122508816 100644 (file)
@@ -38,6 +38,17 @@ sub scrub ($) { #{{{
        }
 } #}}}
 
+sub safeurl ($) { #{{{
+       my $url=shift;
+       if (exists $IkiWiki::Plugin::htmlscrubber::{safe_url_regexp} &&
+           defined $IkiWiki::Plugin::htmlscrubber::safe_url_regexp) {
+               return $url=~/$IkiWiki::Plugin::htmlscrubber::safe_url_regexp/;
+       }
+       else {
+               return 1;
+       }
+} #}}}
+
 sub htmlize ($$$) { #{{{
        my $page = shift;
        my $destpage = shift;
@@ -88,7 +99,7 @@ sub preprocess (@) { #{{{
                # fallthorough
        }
        elsif ($key eq 'authorurl') {
-               $pagestate{$page}{meta}{authorurl}=$value;
+               $pagestate{$page}{meta}{authorurl}=$value if safeurl($value);
                # fallthrough
        }
 
@@ -106,8 +117,10 @@ sub preprocess (@) { #{{{
                }
        }
        elsif ($key eq 'permalink') {
-               $pagestate{$page}{meta}{permalink}=$value;
-               push @{$metaheaders{$page}}, scrub('<link rel="bookmark" href="'.encode_entities($value).'" />');
+               if (safeurl($value)) {
+                       $pagestate{$page}{meta}{permalink}=$value;
+                       push @{$metaheaders{$page}}, scrub('<link rel="bookmark" href="'.encode_entities($value).'" />');
+               }
        }
        elsif ($key eq 'stylesheet') {
                my $rel=exists $params{rel} ? $params{rel} : "alternate stylesheet";
@@ -124,12 +137,14 @@ sub preprocess (@) { #{{{
                        "\" type=\"text/css\" />";
        }
        elsif ($key eq 'openid') {
-               if (exists $params{server}) {
+               if (exists $params{server} && safeurl($params{server})) {
                        push @{$metaheaders{$page}}, '<link href="'.encode_entities($params{server}).
                                '" rel="openid.server" />';
                }
-               push @{$metaheaders{$page}}, '<link href="'.encode_entities($value).
-                       '" rel="openid.delegate" />';
+               if (safeurl($value)) {
+                       push @{$metaheaders{$page}}, '<link href="'.encode_entities($value).
+                               '" rel="openid.delegate" />';
+               }
        }
        elsif ($key eq 'redir') {
                return "" if $page ne $destpage;
index de58d2d7db5ef8e5b46fb261a29d38606b7b0196..b539761ff490c4b5ba873d9c7eb4714285160aeb 100644 (file)
@@ -1,5 +1,6 @@
 ikiwiki (2.32.3) UNRELEASED; urgency=low
 
+  [ Josh Triplett ]
   * Do not allow the about: URI scheme; some browsers interpret about:
     URIs like a limited version of data: URIs.  In particular, some
     versions of Internet Explorer interpret arbitrary HTML content in
@@ -7,6 +8,10 @@ ikiwiki (2.32.3) UNRELEASED; urgency=low
   * Also filter the attributes cite, longdesc, and usemap, which can contain
     URIs.
 
+  [ Joey Hess ]
+  * meta: Check that the urls provided for authorurl, permalink, and openid
+    are safe and can't contain javascript.
+
  -- Josh Triplett <josh@freedesktop.org>  Sun, 10 Feb 2008 13:59:00 -0800
 
 ikiwiki (2.31.2) unstable; urgency=high