Καταγραφή, μετρικές, ιχνηλάτηση και ιδιωτικότητα — DedSec Project
Παρατηρησιμότητα — δομημένα συμβάντα χωρίς διαρροή δεδομένων Σενάριο και κριτήρια επιτυχίας Κατά την εισαγωγή δεδομένων χωρίς διαδίκτυο κατέγραψε μόνο περιορισμένα διαγνωστικά στοιχεία…
Παρατηρησιμότητα — δομημένα συμβάντα χωρίς διαρροή δεδομένων
Σενάριο και κριτήρια επιτυχίας
Κατά την εισαγωγή δεδομένων χωρίς διαδίκτυο κατέγραψε μόνο περιορισμένα διαγνωστικά στοιχεία: σοβαρότητα, σταθερό κωδικό σφάλματος, σύντομο αναγνωριστικό συσχέτισης, χιλιοστά δευτερολέπτου και αριθμό προσπάθειας. Μην αποθηκεύεις περιεχόμενο αρχείων, email, διακριτικά σύνδεσης ή κωδικούς. Αν μία συνάρτηση επιχειρεί να προσθέσει άγνωστο πεδίο, καλύτερα να αποτύχει παρά να καταγράψει ιδιωτικές πληροφορίες.
Εκτελέσιμο εργαστήριο
Αποθήκευσε ως 15_observability.py και εκτέλεσε με Python 3 και την ενσωματωμένη βιβλιοθήκη. Τα δεδομένα είναι τεχνητά, χωρίς πρόσβαση σε προσωπικά αρχεία ή δίκτυο.
import json, re
ALLOWED = {"duration_ms", "attempt"}
def event(level, code, trace_id, **fields):
if level not in {"INFO","ERROR"}:
raise ValueError("invalid severity")
if not re.fullmatch(r"[a-f0-9]{8}", trace_id):
raise ValueError("invalid correlation ID")
if set(fields) - ALLOWED:
raise ValueError("unexpected or sensitive field")
if "duration_ms" in fields and (type(fields["duration_ms"]) is not int or fields["duration_ms"] < 0):
raise ValueError("duration outside range")
if "attempt" in fields and (type(fields["attempt"]) is not int or fields["attempt"] < 1):
raise ValueError("invalid attempt")
return json.dumps({"level":level,"code":code,"trace":trace_id,**fields},
ensure_ascii=False,sort_keys=True)
line = event("ERROR","IMPORT_FAILED","deadbeef",duration_ms=12,attempt=1)
assert json.loads(line)["duration_ms"] == 12
assert "\n" not in line
for extra in ({"password":"secret"},{"email":"[email protected]"}):
try: event("INFO","TRY","deadbeef",**extra)
except ValueError: pass
else: raise AssertionError("sensitive field accepted")
print("PASS structured log allowlist")
Τεχνική ερμηνεία
Το δομημένο JSON επιτρέπει ανάλυση συμβάντων χωρίς εύθραυστη επεξεργασία ελεύθερου κειμένου. Το αναγνωριστικό συσχέτισης συνδέει τα μηνύματα της ίδιας εργασίας, αλλά δεν πρέπει να είναι μυστικό συνεδρίας. Η σοβαρότητα και ο κωδικός πρέπει να αντανακλούν πραγματική κατάσταση: το πάτημα κουμπιού δεν αποδεικνύει επιτυχημένη αποθήκευση. Η ρητή λίστα επιτρεπόμενων πεδίων είναι ασφαλέστερη από προσπάθειες αφαίρεσης ευαίσθητου κειμένου μετά την καταγραφή. Όρισε όρια πλήθους, διατήρησης και πρόσβασης στα αρχεία.
Περιορισμένες δοκιμές
Δοκίμασε άγνωστο πεδίο και μη έγκυρο αναγνωριστικό. Πρόσθεσε ελληνικό μήνυμα με ensure_ascii=False, αλλά κράτησε σταθερό λατινικό κωδικό συμβάντος. Δοκίμασε αλλαγές γραμμής μέσα σε κείμενο και έλεγξε ότι το JSON δεν δημιουργεί ψεύτικες εγγραφές. Ξεχώρισε την έναρξη εισαγωγής από τη βεβαιωμένη επιτυχία μετά την ολοκλήρωση εγγραφής.
Διάγνωση
Αν δεν εμφανίζονται συμβάντα, δες αν το πρόγραμμα πράγματι έφτασε στο αντίστοιχο στάδιο. Αφαίρεσε προσωπικές τιμές εκεί όπου δημιουργείται το γεγονός, όχι μόνο αργότερα σε φίλτρα. Σύγκρινε πλήθος συμβάντων με γνωστές τεχνητές δοκιμές για να εντοπίσεις απώλειες ή διπλές καταχωρίσεις.
Πρόσθετη τεχνική ανάλυση
Φίλτραρε δομημένα πεδία πριν τη σειριοποίηση και κάθε προώθηση. Μια κανονική έκφραση στην τελική γραμμή δεν βρίσκει αξιόπιστα μυστικό μέσα σε εξαίρεση ή αντικείμενο αιτήματος. Πρόσθεσε αρνητικά δείγματα με ψεύτικα διαπιστευτήρια και έλεγξε χρήσιμα διαγνωστικά μαζί με απουσία μυστικών.