blob: 0627606932efa1018c0ba369b6a7c0d55996f865 [file] [edit]
diff --git a/Lib/http/cookies.py b/Lib/http/cookies.py
index 2c1f021..b84e268 100755
--- a/Lib/http/cookies.py
+++ b/Lib/http/cookies.py
@@ -389,17 +389,22 @@ class Morsel(dict):
return '<%s: %s>' % (self.__class__.__name__, self.OutputString())
def js_output(self, attrs=None):
+ import base64
# Print javascript
output_string = self.OutputString(attrs)
if _has_control_character(output_string):
raise CookieError("Control characters are not allowed in cookies")
+ # Base64-encode value to avoid template
+ # injection in cookie values.
+ output_encoded = base64.b64encode(output_string.encode('utf-8')).decode("ascii")
return """
<script type="text/javascript">
<!-- begin hiding
- document.cookie = \"%s\";
+ document.cookie = atob(\"%s\");
// end hiding -->
</script>
- """ % (output_string.replace('"', r'\"'))
+ """ % (output_encoded,)
+
def OutputString(self, attrs=None):
# Build up our result