1
|
|
|
import unittest |
2
|
|
|
from time import time |
3
|
|
|
|
4
|
|
|
from spike import create_app |
5
|
|
|
from spike.model import db |
6
|
|
|
from spike.model.naxsi_whitelist import NaxsiWhitelist |
7
|
|
|
|
8
|
|
|
try: |
9
|
|
|
from urlparse import urlparse |
|
|
|
|
10
|
|
|
except ImportError: # python3 |
11
|
|
|
from urllib.parse import urlparse |
12
|
|
|
|
13
|
|
|
|
14
|
|
|
class FlaskrTestCase(unittest.TestCase): |
15
|
|
|
def setUp(self): |
16
|
|
|
app = create_app() |
17
|
|
|
db.init_app(app) |
18
|
|
|
app.config['TESTING'] = True |
19
|
|
|
self.app = app.test_client() |
20
|
|
|
self.wid = self.__create_whitelist() |
21
|
|
|
|
22
|
|
|
def tearDown(self): |
23
|
|
|
db.session.delete(NaxsiWhitelist.query.filter(NaxsiWhitelist.id == self.wid).first()) |
|
|
|
|
24
|
|
|
db.session.commit() |
25
|
|
|
|
26
|
|
|
@staticmethod |
27
|
|
|
def __create_whitelist(): |
28
|
|
|
_wlist = NaxsiWhitelist(wl='wl:42', timestamp=int(time()), whitelistset='WORDPRESS', mz='BODY', active=1, |
29
|
|
|
negative=False) |
30
|
|
|
db.session.add(_wlist) |
31
|
|
|
db.session.commit() |
32
|
|
|
return NaxsiWhitelist.query.order_by(NaxsiWhitelist.id.desc()).first().id |
|
|
|
|
33
|
|
|
|
34
|
|
|
def test_index(self): |
35
|
|
|
rv = self.app.get('/whitelists/') |
36
|
|
|
self.assertEqual(rv.status_code, 200) |
37
|
|
|
|
38
|
|
|
def test_plain(self): |
39
|
|
|
_id = NaxsiWhitelist.query.order_by(NaxsiWhitelist.id.desc()).first().id |
|
|
|
|
40
|
|
|
|
41
|
|
|
rv = self.app.get('/whitelists/plain/%d' % (_id + 1)) |
42
|
|
|
self.assertEqual(rv.status_code, 302) |
43
|
|
|
|
44
|
|
|
rv = self.app.get('/whitelists/plain/%d' % _id) |
45
|
|
|
self.assertIn('BasicRule wl:wl:42 "mz:BODY";', str(rv.data)) |
46
|
|
|
|
47
|
|
|
def test_view(self): |
48
|
|
|
_id = NaxsiWhitelist.query.order_by(NaxsiWhitelist.id.desc()).first().id |
|
|
|
|
49
|
|
|
|
50
|
|
|
rv = self.app.get('/whitelists/view/%d' % (_id + 1)) |
51
|
|
|
self.assertEqual(rv.status_code, 302) |
52
|
|
|
|
53
|
|
|
def test_del(self): |
54
|
|
|
wlist = NaxsiWhitelist(wl='wl:42', timestamp=int(time()), whitelistset='WORDPRESS', mz='BODY', active=1, |
55
|
|
|
negative=False) |
56
|
|
|
db.session.add(wlist) |
57
|
|
|
db.session.commit() |
58
|
|
|
_id = NaxsiWhitelist.query.order_by(NaxsiWhitelist.id.desc()).first().id |
|
|
|
|
59
|
|
|
|
60
|
|
|
rv = self.app.get('/whitelists/del/%d' % (_id + 1)) |
61
|
|
|
self.assertEqual(302, rv.status_code) |
62
|
|
|
|
63
|
|
|
rv = self.app.get('/whitelists/del/%d' % _id, follow_redirects=True) |
64
|
|
|
self.assertIn('Successfully deleted %d' % _id, str(rv.data)) |
65
|
|
|
|
66
|
|
|
def test_new(self): |
67
|
|
|
rv = self.app.get('/whitelists/new') |
68
|
|
|
self.assertEqual(rv.status_code, 200) |
69
|
|
|
|
70
|
|
|
rv = self.app.post('/whitelists/new', data={'wl': '42', |
71
|
|
|
'mz': 'BODY', 'whitelistset': 'WORDPRESS'}) |
72
|
|
|
self.assertEqual(rv.status_code, 200) |
73
|
|
|
_wlist = NaxsiWhitelist.query.order_by(NaxsiWhitelist.id.desc()).first() |
|
|
|
|
74
|
|
|
self.assertEqual(_wlist.mz, 'BODY') |
75
|
|
|
self.assertEqual(_wlist.negative, 0) |
76
|
|
|
self.assertEqual(_wlist.wl, '42') |
77
|
|
|
|
78
|
|
|
rv = self.app.post('/whitelists/new', data={'mz': 'BODY', 'custom_mz_val': '', 'whitelistset': 'WORDPRESS'}) |
79
|
|
|
self.assertIn('Please enter a wl', str(rv.data)) |
80
|
|
|
rv = self.app.post('/whitelists/new', data={'mz': 'BODY', 'custom_mz_val': '', 'wl': '42'}) |
81
|
|
|
self.assertIn('Please enter a whitelistset', str(rv.data)) |
82
|
|
|
|
83
|
|
|
rv = self.app.post('/whitelists/new', data={'mz': 'BODY', 'custom_mz_val': '', 'wl': 'abcdef', |
84
|
|
|
'whitelistset': 'WORDPRESS'}, follow_redirects=True) |
85
|
|
|
self.assertIn('Illegal character in the wl.', str(rv.data)) |
86
|
|
|
|
87
|
|
|
db.session.delete(NaxsiWhitelist.query.order_by(NaxsiWhitelist.id.desc()).first()) |
|
|
|
|
88
|
|
|
db.session.commit() |
89
|
|
|
|
90
|
|
|
def test_generate(self): |
91
|
|
|
rv = self.app.get('/whitelists/generate') |
92
|
|
|
self.assertEqual(rv.status_code, 200) |
93
|
|
|
|
94
|
|
|
rv = self.app.post('/whitelists/generate') |
95
|
|
|
self.assertEqual(rv.status_code, 200) |
96
|
|
|
self.assertIn('Please input nxlogs', str(rv.data)) |
97
|
|
|
|
98
|
|
|
rv = self.app.post('/whitelists/generate', data={'nxlogs': 'pouet,lol'}) |
99
|
|
|
self.assertEqual(rv.status_code, 200) |
100
|
|
|
self.assertIn('string "ip=" not found.', str(rv.data)) |
101
|
|
|
|
102
|
|
|
rv = self.app.post('/whitelists/generate', data={'nxlogs': 'ip=1234'}) |
103
|
|
|
self.assertEqual(rv.status_code, 200) |
104
|
|
|
self.assertIn('string "," not found.', str(rv.data)) |
105
|
|
|
|
106
|
|
|
logs = "2013/11/10 07:36:19 [error] 8278#0: *5932 NAXSI_FMT: ip=X.X.X.X&server=Y.Y.Y.Y&" \ |
107
|
|
|
"uri=/phpMyAdmin-2.8.2/scripts/setup.php&learning=0&vers=0.52&total_processed=472&total_blocked=204&" \ |
108
|
|
|
"block=0&cscore0=$UWA&score0=8&zone0=HEADERS&id0=42000227&var_name0=user-agent, client: X.X.X.X," \ |
109
|
|
|
'server: blog.memze.ro, request: "GET /phpMyAdmin-2.8.2/scripts/setup.php HTTP/1.1", host: "X.X.X.X"' |
110
|
|
|
rv = self.app.post('/whitelists/generate', data={'nxlogs': logs}) |
111
|
|
|
self.assertEqual(rv.status_code, 200) |
112
|
|
|
self.assertIn('BasicRule wl:42000227 "mz:$HEADERS_VAR:user-agent";', str(rv.data)) |
113
|
|
|
|