------------------------------------------------------------
revno: 1302
committer: Mark Sapiro <msap...@value.net>
branch nick: 2.1
timestamp: Sun 2011-05-01 09:21:29 -0700
message:
  Made the web escaping of additional characters a configuration setting.
modified:
  Mailman/Defaults.py.in
  Mailman/Utils.py
  NEWS


--
lp:mailman/2.1
https://code.launchpad.net/~mailman-coders/mailman/2.1

Your team Mailman Checkins is subscribed to branch lp:mailman/2.1.
To unsubscribe from this branch go to 
https://code.launchpad.net/~mailman-coders/mailman/2.1/+edit-subscription
=== modified file 'Mailman/Defaults.py.in'
--- Mailman/Defaults.py.in	2011-04-26 02:10:06 +0000
+++ Mailman/Defaults.py.in	2011-05-01 16:21:29 +0000
@@ -201,6 +201,31 @@
 WEB_HIGHLIGHT_COLOR = '#dddddd'                   # If true, alternating rows
                                                   # in listinfo & admin display
 
+# User entered data is escaped for redisplay in web responses to avoid Cross
+# Site Scripting (XSS) attacks. The normal escaping replaces the characters
+# <, >, & and " with the respective HTML entities &lt;, &gt;, &amp; and
+# &quot;.  There are apparently some older, broken browsers that misinterpret
+# certain non-ascii characters as <, > or ".  The following two settings
+# control whether additional characters are escaped, and what characters are
+# replaced with what.  Note that in character sets that represent some
+# characters as multi-byte sequences, enabling the escaping of additional
+# characters can replace part of a multi-byte sequence with an HTML entity,
+# thus breaking an otherwise harmless character.
+#
+# Enable the replacement of additional characters when escaping strings for
+# the web.
+BROKEN_BROWSER_WORKAROUND = No
+#
+# If the above setting is Yes, the following dictionary definition determines
+# what additional characters are replaced with what.
+BROKEN_BROWSER_REPLACEMENTS = {'\x8b': '&#8249;',  # single left angle quote
+                               '\x9b': '&#8250;',  # single right angle quote
+                               '\xbc': '&#188;',   # < plus high order bit
+                               '\xbe': '&#190;',   # > plus high order bit
+                               '\xa2': '&#162;',   # " plus high order bit
+                              }
+
+
 
 #####
 # Archive defaults

=== modified file 'Mailman/Utils.py'
--- Mailman/Utils.py	2011-04-26 15:45:42 +0000
+++ Mailman/Utils.py	2011-05-01 16:21:29 +0000
@@ -425,19 +425,13 @@
 
 
 _ampre = re.compile('&amp;((?:#[0-9]+|[a-z]+);)', re.IGNORECASE)
-# Characters misinterpreted as < or > by some broken browsers.
-_broken_browser = {'\x8b': '&#8249;',
-                   '\x9b': '&#8250;',
-                   '\xbc': '&#188;',
-                   '\xbe': '&#190;',
-                   '\xa2': '&#162;'
-                  }
 def websafe(s):
-    # Archiver can pass unicode here. Just skip them as the
-    # archiver escapes non-ascii anyway.
-    if isinstance(s, str):
-        for k in _broken_browser:
-            s = s.replace(k, _broken_browser[k])
+    if mm_cfg.BROKEN_BROWSER_WORKAROUND:
+        # Archiver can pass unicode here. Just skip them as the
+        # archiver escapes non-ascii anyway.
+        if isinstance(s, str):
+            for k in mm_cfg.BROKEN_BROWSER_REPLACEMENTS:
+                s = s.replace(k, mm_cfg.BROKEN_BROWSER_REPLACEMENTS[k])
     # Don't double escape html entities
     return _ampre.sub(r'&\1', cgi.escape(s, quote=True))
 

=== modified file 'NEWS'
--- NEWS	2011-04-25 23:52:35 +0000
+++ NEWS	2011-05-01 16:21:29 +0000
@@ -41,6 +41,13 @@
       is responded to or just logged.  It defaults to Yes which is different
       from prior behavior.  Bug #410236.
 
+    - Two new mm_cfg.py settings, BROKEN_BROWSER_WORKAROUND and
+      BROKEN_BROWSER_REPLACEMENTS, have been added to control escaping of
+      additional characters beyond the standard <, >, &, and " in the web UI.
+      See the documentation of these settings in Defaults.py.  The default
+      values for these settings result in no change from the prior release.
+      Bug #774588.
+
   i18n
 
     - Fixed a missing format character in the Spanish translation.

_______________________________________________
Mailman-checkins mailing list
Mailman-checkins@python.org
Unsubscribe: 
http://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org

Reply via email to