mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-10 12:16:49 +00:00
fix: require POST for user block/unblock and OTP email, flag console cookie
- user_block, user_unblock and admin_email_otp changed state on GET, so an <img> tag could lock a user out or trigger OTP emails through an admin's session. They now require POST; the buttons are CSRF forms. - The console token cookie is set with httponly, SameSite=Lax and, on HTTPS, secure. Only novncd reads it; the page gets the token directly.
This commit is contained in:
parent
e76149c71a
commit
cf1cde376b
8 changed files with 77 additions and 6 deletions
|
|
@ -102,11 +102,21 @@ class AdminTestCase(TestCase):
|
|||
self.assertEqual(ua.max_memory, 2048)
|
||||
self.assertEqual(ua.max_disk_size, 8)
|
||||
|
||||
# Blocking changes state, so a GET (e.g. an <img> tag) must not do it.
|
||||
User.objects.filter(id=user_id).update(is_active=True)
|
||||
response = self.client.get(reverse("admin:user_block", args=[user_id]))
|
||||
self.assertEqual(response.status_code, 405)
|
||||
self.assertTrue(User.objects.get(id=user_id).is_active)
|
||||
|
||||
response = self.client.post(reverse("admin:user_block", args=[user_id]))
|
||||
user = User.objects.get(id=user_id)
|
||||
self.assertFalse(user.is_active)
|
||||
|
||||
response = self.client.get(reverse("admin:user_unblock", args=[user_id]))
|
||||
self.assertEqual(response.status_code, 405)
|
||||
self.assertFalse(User.objects.get(id=user_id).is_active)
|
||||
|
||||
response = self.client.post(reverse("admin:user_unblock", args=[user_id]))
|
||||
user = User.objects.get(id=user_id)
|
||||
self.assertTrue(user.is_active)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue