# No messages added to the 4 already defined.
self.assert_(len(messages) == 4)
+ def test_XSS(self):
+ """Check that chat is protected against cross-site scripting (by disabling html tags)."""
+
+ response = self.client.post('/jqchat/room/1/ajax/', {'time': 0,
+ 'action': 'postmsg',
+ 'message': '<script>alert("boo!");</script>'})
+ self.assert_(response.status_code == 200, response.status_code)
+
+ payload = simplejson.loads(response.content)
+ messages = payload['messages']
+ self.assert_('<script>' in messages[-1]['text'])
+ self.assert_('<script>' not in messages[-1]['text'])
+
+
class EventTest(TestCase):
"""Create new events in the room."""
from django.template import RequestContext
from django.conf import settings
from django.contrib.auth.decorators import login_required
+from django.utils.html import escape
from models import Room, Message
msg_text = self.request.POST['message']
if len(msg_text.strip()) > 0: # Ignore empty strings.
- Message.objects.create_message(self.request.user, self.ThisRoom, msg_text)
+ Message.objects.create_message(self.request.user, self.ThisRoom, escape(msg_text))
else:
# If a GET, make sure that no action was specified.
if self.request.GET.get('action', None):