crash.software
Projects
Pull Requests
Issues
Builds
headers-analyzer
Code
Files
Commits
Branches
Tags
Pull Requests
Code Comments
Code Compare
Issues
List
Boards
Milestones
Builds
Statistics
Contributions
Source Lines
Child Projects
Projects
STRLCPY
headers-analyzer
Commits
5d9a29df
🤬
Sign In
Added automatic settings save and restore functionality
Antonio Sanchez
committed
10 years ago
5d9a29df
1 parent
652f8ffa
Total 1 files
■ ■ ■ ■ ■
■
HeadersAnalyzer.py
skipped 29 lines
30
30
from burp import IScannerCheck
31
31
from burp import IScanIssue
32
32
from burp import ITab
33
+
from burp import IExtensionStateListener
33
34
from javax import swing
34
35
from java.awt import Font
35
36
from java.awt.datatransfer import StringSelection
skipped 1 lines
37
38
from java.awt import Toolkit
38
39
import java.lang as lang
39
40
import re
41
+
import pickle
40
42
41
-
class BurpExtender(IBurpExtender, IScannerCheck, ITab):
43
+
class BurpExtender(IBurpExtender, IScannerCheck, ITab
,
IExtensionStateListener
):
42
44
43
45
def registerExtenderCallbacks(self, callbacks):
44
46
45
-
print "Loading...
\
n
"
47
+
print "Loading..."
46
48
47
49
self._callbacks = callbacks
48
50
self._callbacks.setExtensionName("Headers Analyzer")
49
51
self._callbacks.registerScannerCheck(self)
52
+
self._callbacks.registerExtensionStateListener(self)
50
53
51
54
self.initGui()
55
+
self.extensionLoaded()
52
56
self._callbacks.addSuiteTab(self)
53
57
54
58
# Variable to keep a browsable structure of the issues find on each host
55
59
# later used in the export function.
56
60
self.global_issues = {}
57
61
58
-
print "Loaded!
\
n
"
62
+
print "Loaded!"
59
63
60
64
return
65
+
66
+
def saveExtensionSetting(self, name, value):
67
+
try:
68
+
self._callbacks.saveExtensionSetting(name, value)
69
+
except Exception:
70
+
print ('Error saving extension settings')
71
+
72
+
# Save current settings when the extension is unloaded or Burp is closed
73
+
def extensionUnloaded(self):
74
+
config = {
75
+
'interestingHeadersCB' : self.interestingHeadersCB.isSelected(),
76
+
'securityHeadersCB' : self.securityHeadersCB.isSelected(),
77
+
'xFrameOptionsCB' : self.xFrameOptionsCB.isSelected(),
78
+
'xContentTypeOptionsCB' : self.xContentTypeOptionsCB.isSelected(),
79
+
'xXssProtectionCB' : self.xXssProtectionCB.isSelected(),
80
+
'HstsCB' : self.HstsCB.isSelected(),
81
+
'CorsCB' : self.CorsCB.isSelected(),
82
+
'contentSecurityPolicyCB' : self.contentSecurityPolicyCB.isSelected(),
83
+
'xPermittedCrossDomainPoliciesCB' : self.xPermittedCrossDomainPoliciesCB.isSelected(),
84
+
'boringHeadersList' : self.getBoringHeadersList()
85
+
}
86
+
87
+
for key, value in config.iteritems(): # For each config value
88
+
self.saveExtensionSetting(key, pickle.dumps(value))
89
+
90
+
return
91
+
92
+
# Restore last configuration
93
+
def extensionLoaded(self):
94
+
try:
95
+
self.interestingHeadersCB.setSelected(pickle.loads(self._callbacks.loadExtensionSetting('interestingHeadersCB')))
96
+
self.securityHeadersCB.setSelected(pickle.loads(self._callbacks.loadExtensionSetting('securityHeadersCB')))
97
+
self.xFrameOptionsCB.setSelected(pickle.loads(self._callbacks.loadExtensionSetting('xFrameOptionsCB')))
98
+
self.xContentTypeOptionsCB.setSelected(pickle.loads(self._callbacks.loadExtensionSetting('xContentTypeOptionsCB')))
99
+
self.xXssProtectionCB.setSelected(pickle.loads(self._callbacks.loadExtensionSetting('xXssProtectionCB')))
100
+
self.HstsCB.setSelected(pickle.loads(self._callbacks.loadExtensionSetting('HstsCB')))
101
+
self.CorsCB.setSelected(pickle.loads(self._callbacks.loadExtensionSetting('CorsCB')))
102
+
self.contentSecurityPolicyCB.setSelected(pickle.loads(self._callbacks.loadExtensionSetting('contentSecurityPolicyCB')))
103
+
self.xPermittedCrossDomainPoliciesCB.setSelected(pickle.loads(self._callbacks.loadExtensionSetting('xPermittedCrossDomainPoliciesCB')))
104
+
self.boringHeadersList.setListData(pickle.loads(self._callbacks.loadExtensionSetting('boringHeadersList')))
105
+
106
+
print "Extension settings restored!"
107
+
except Exception as e:
108
+
print "Error restoring extension settings (first time loading the extension?)"
61
109
62
110
def initGui(self):
63
111
skipped 195 lines
259
307
clipboard = self.getClipboardText()
260
308
261
309
if clipboard != None and clipboard != "":
262
-
model = self.boringHeadersList.getModel()
263
310
lines = clipboard.split('\n')
264
-
current = []
265
-
266
-
for i in range(0, model.getSize()):
267
-
current.append(model.getElementAt(i))
311
+
current = self.getBoringHeadersList()
268
312
269
313
for line in lines:
270
314
if line not in current and not line.isspace():
skipped 7 lines
278
322
279
323
def remove(self, e):
280
324
indices = self.boringHeadersList.getSelectedIndices().tolist()
281
-
model = self.boringHeadersList.getModel()
282
-
current = []
283
-
284
-
for i in range(0, model.getSize()):
285
-
current.append(model.getElementAt(i))
325
+
current = self.getBoringHeadersList()
286
326
287
327
for index in reversed(indices):
288
328
del current[index]
skipped 20 lines
309
349
310
350
def add(self, e):
311
351
source = e.getSource()
352
+
353
+
current = self.getBoringHeadersList()
354
+
current.append(self.addTF.getText())
355
+
self.boringHeadersList.setListData(current)
356
+
357
+
self.addTF.setText("New item...")
358
+
359
+
def getBoringHeadersList(self):
312
360
model = self.boringHeadersList.getModel()
313
361
current = []
314
362
315
363
for i in range(0, model.getSize()):
316
364
current.append(model.getElementAt(i))
317
365
318
-
current.append(self.addTF.getText())
319
-
self.boringHeadersList.setListData(current)
366
+
return current
320
367
321
-
self.addTF.setText("New item...")
322
368
323
369
# Browses the "global_issues" var.
324
370
def export(self, e):
skipped 266 lines
All occurrences
Please wait...
Page is in error, reload to recover