Mercurial > p > roundup > code
annotate test/test_jinja2.py @ 5201:a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet
and
https://seclab.stanford.edu/websec/csrf/csrf.pdf
Basically implement Synchronizer (CSRF) Tokens per form on a page.
Single use (destroyed once used). Random input data for the token
includes:
system random implementation in python using /dev/urandom
(fallback to random based on timestamp as the seed. Not
as good, but should be ok for the short lifetime of the
token??)
the id (in cpython it's the memory address) of the object
requesting a token. In theory this depends on memory layout, the
history of the process (how many previous objects have been
allocated from the heap etc.) I claim without any proof that for
long running processes this is another source of randomness. For
short running processes with little activity it could be guessed.
last the floating point time.time() value is added. This may
only have 1 second resolution so may be guessable.
Hopefully for a short lived (2 week by default) token this is
sufficient. Also in the current implementation the user is notified when
validation fails and is told why. This allows the roundup admin to find
the log entry (at error level) and try to resolve the issue. In the
future user notification may change but for now this is probably best.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 18 Mar 2017 16:59:01 -0400 |
| parents | 364c54991861 |
| children | 198b6e810c67 |
| rev | line source |
|---|---|
|
4964
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
1 #-*- encoding: utf8 -*- |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
2 """ Testing the jinja2 templating engine of roundup-tracker. |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
3 |
|
5009
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
4 Copyright: 2016 Intevation GmbH. |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
5 Author: Bernhard E. Reiter <bernhard@intevation.de> |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
6 |
|
4964
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
7 This module is Free Software under the Roundup licensing of 1.5, |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
8 see the COPYING.txt file coming with Roundup. |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
9 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
10 Just a test file template for now. |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
11 """ |
|
5009
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
12 import shutil # only, needed for tearDown. TODO: Remove when refactored. |
|
4964
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
13 import unittest |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
14 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
15 import db_test_base |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
16 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
17 TESTSUITE_IDENTIFIER='jinja2' |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
18 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
19 class TestCase_Zero(unittest.TestCase): |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
20 def test_zero(self): |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
21 self.assertEqual(True, True) |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
22 |
|
5033
63c79c0992ae
Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents:
5009
diff
changeset
|
23 |
|
63c79c0992ae
Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents:
5009
diff
changeset
|
24 class Jinja2Test(object): |
|
5009
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
25 """Sets up and tears down an instance with database contents. |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
26 |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
27 Setup and teardown modelled after the use of db_test_base |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
28 by several modules like test_xmlrpc and test_userauditor. |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
29 |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
30 TODO: Should probably be moved to a base case in db_test_base.py. |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
31 """ |
|
4964
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
32 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
33 backend = None # can be used to create tests per backend, see test_xmlrpc |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
34 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
35 def setUp(self): |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
36 self.dirname = '_test_' + TESTSUITE_IDENTIFIER |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
37 self.instance = db_test_base.setupTracker(self.dirname, self.backend) |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
38 self.db = self.instance.open('admin') |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
39 |
|
5009
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
40 def tearDown(self): |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
41 self.db.close() |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
42 try: |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
43 shutil.rmtree(self.dirname) |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
44 except OSError, error: |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
45 if error.errno not in (errno.ENOENT, errno.ESRCH): raise |
|
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
46 |
|
4964
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
47 def test_zero(self): |
|
5009
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
48 """Do nothing just make sure that setup and teardown works.""" |
|
4964
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
49 pass |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
50 |
|
5009
3766e0ca8e7a
test_jinja2: stub improved, now with proper teardown.
Bernhard Reiter <bernhard@intevation.de>
parents:
4964
diff
changeset
|
51 |
|
5037
364c54991861
Remove unneeded TestSuite code from tests
John Kristensen <john@jerrykan.com>
parents:
5033
diff
changeset
|
52 # only using one database backend for now, not sure if doing all |
|
364c54991861
Remove unneeded TestSuite code from tests
John Kristensen <john@jerrykan.com>
parents:
5033
diff
changeset
|
53 # backends will keep the test focussed enough to be useful for the used |
|
364c54991861
Remove unneeded TestSuite code from tests
John Kristensen <john@jerrykan.com>
parents:
5033
diff
changeset
|
54 # computing time. Would be okay to change in the future. |
|
5033
63c79c0992ae
Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents:
5009
diff
changeset
|
55 class anydbmJinja2Test(Jinja2Test, unittest.TestCase): |
|
63c79c0992ae
Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents:
5009
diff
changeset
|
56 backend = 'anydbm' |
|
63c79c0992ae
Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents:
5009
diff
changeset
|
57 |
|
4964
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
58 # vim: ts=4 et sts=4 sw=4 ai : |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
59 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
60 |
