mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] changelog2009-08-18 02:37 am

[dw-free] http://bugs.dwscoalition.org/show_bug.cgi?id=1602

[commit: http://hg.dwscoalition.org/dw-free/rev/fdb51799fa25]

http://bugs.dwscoalition.org/show_bug.cgi?id=1602

Fix unsanitized output issue with Google Analytics ids.

Patch by [personal profile] rat.

Files modified:
  • bin/upgrading/en.dat
  • cgi-bin/DW/PageStats/GoogleAnalytics.pm
  • cgi-bin/DW/Setting/GoogleAnalytics.pm
--------------------------------------------------------------------------------
diff -r 2959a543e2d9 -r fdb51799fa25 bin/upgrading/en.dat
--- a/bin/upgrading/en.dat	Mon Aug 17 13:46:16 2009 -0500
+++ b/bin/upgrading/en.dat	Tue Aug 18 02:37:21 2009 +0000
@@ -2663,6 +2663,8 @@ setting.graphicpreviews.option.comm=Allo
 
 setting.graphicpreviews.option.self=Display a preview of external links when hovering over them
 
+setting.googleanalytics.error.invalid=Invalid Google Analytics ID entered, must be of the format: UA-NNNNNNN-NN (where N represents numbers).
+
 setting.googleanalytics.label=Google Analytics ID
 
 setting.imageplaceholders.error.invalid=Invalid image size.
diff -r 2959a543e2d9 -r fdb51799fa25 cgi-bin/DW/PageStats/GoogleAnalytics.pm
--- a/cgi-bin/DW/PageStats/GoogleAnalytics.pm	Mon Aug 17 13:46:16 2009 -0500
+++ b/cgi-bin/DW/PageStats/GoogleAnalytics.pm	Tue Aug 18 02:37:21 2009 +0000
@@ -29,8 +29,12 @@ sub render {
         $code = $LJ::SITE_PAGESTAT_CONFIG{google_analytics};
     } elsif ( $ctx eq 'journal' ) {
         $code = LJ::get_active_journal()->google_analytics;
+        # the ejs call isn't strictly necessary but catches any 
+        # dodgy analytics codes which may have been stored before
+        # validation was implemented.
+        $code = LJ::ejs( $code );
     }
-
+    
     return qq{
 <script type="text/javascript">
 var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
diff -r 2959a543e2d9 -r fdb51799fa25 cgi-bin/DW/Setting/GoogleAnalytics.pm
--- a/cgi-bin/DW/Setting/GoogleAnalytics.pm	Mon Aug 17 13:46:16 2009 -0500
+++ b/cgi-bin/DW/Setting/GoogleAnalytics.pm	Tue Aug 18 02:37:21 2009 +0000
@@ -56,7 +56,13 @@ sub save {
     my $txt = $class->get_arg( $args, "code" );
     $txt = LJ::trim( $txt || "" );
     $txt = LJ::text_trim( $txt, 0, 100 );
-    $u->google_analytics ( $txt );
+    # Check that the ID matches the format UA-number-number
+    # or is blank before proceeding.
+    if ( $txt =~ /^UA-\d{1,20}-\d{1,5}$/i or $txt eq "" ) {
+        $u->google_analytics ( $txt );
+    } else {
+        $class->errors( "code" => $class->ml( 'setting.googleanalytics.error.invalid' ) ) ;
+    }
     return 1;
 }
 
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org