Skip to content

Commit 154a5a8

Browse files
author
patched.codes[bot]
committed
Patched: "/tmp/tmpqik896dk/modules/flowmldetection/flowmldetection.py"
1 parent 3f08cb9 commit 154a5a8

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

modules/flowmldetection/flowmldetection.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from slips_files.common.imports import *
2+
import hmac
3+
import hashlib
24
from sklearn.linear_model import SGDClassifier
35
from sklearn.preprocessing import StandardScaler
46
import pickle
@@ -332,18 +334,35 @@ def store_model(self):
332334
with open('./modules/flowmldetection/scaler.bin', 'wb') as g:
333335
data = pickle.dumps(self.scaler)
334336
g.write(data)
335-
337+
338+
class SecureUnpickler(pickle.Unpickler):
339+
@classmethod
340+
def loads(cls, data, key):
341+
# Check HMAC for data integrity
342+
hmac_new, data = data[:64], data[64:]
343+
if hmac.new(key, data, hashlib.sha256).hexdigest().encode() != hmac_new:
344+
raise ValueError("Data integrity check failed")
345+
return cls.loads(data)
346+
347+
def load(self):
348+
raise NotImplementedError("Use SecureUnpickler.loads() instead")
349+
350+
def loads(self, data):
351+
return super().loads(data)
352+
336353
def read_model(self):
337354
"""
338355
Read the trained model from disk
339356
"""
340357
try:
341358
self.print('Reading the trained model from disk.', 0, 2)
342359
with open('./modules/flowmldetection/model.bin', 'rb') as f:
343-
self.clf = pickle.load(f)
360+
data = f.read()
361+
self.clf = SecureUnpickler.loads(data, b'my_secret_key')
344362
self.print('Reading the trained scaler from disk.', 0, 2)
345363
with open('./modules/flowmldetection/scaler.bin', 'rb') as g:
346-
self.scaler = pickle.load(g)
364+
data = g.read()
365+
self.scaler = SecureUnpickler.loads(data, b'my_secret_key')
347366
except FileNotFoundError:
348367
# If there is no model, create one empty
349368
self.print('There was no model. Creating a new empty model.', 0, 2)

0 commit comments

Comments
 (0)