GammaCyber

כתיבת קוד — שיעור 22

Build, Deployment ו-Code Review

כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.

T2 · בסיסי200 נק'~15 דק'build
פרסור קובץ .env
ממש parse_env(text) שמפרק תוכן קובץ .env למילון. דלג על שורות ריקות ועל הערות (מתחילות ב-#). כל שורה KEY=VALUE: התעלם מקידומת 'export '; קצץ רווחים סביב המפתח והערך; הסר מרכאות עוטפות (' או ") מהערך; פצל על ה-'=' הראשון בלבד (כך ש-'=' בערך נשמר). שורה בלי '=' — דלג.
דוגמאות
'A=1\n# comment\nB="two words"\nexport C=3' → {'A':'1','B':'two words','C':'3'}
'URL=http://x?a=1&b=2' → {'URL':'http://x?a=1&b=2'}
פתרון-ייחוס פרסור קובץ .env ›
def parse_env(text: str) -> dict: env = {} for line in text.splitlines(): line = line.strip() if not line or line.startswith('#'): continue if line.startswith('export '): line = line[7:].strip() if '=' not in line: continue k, v = line.split('=', 1); k = k.strip(); v = v.strip() if len(v) >= 2 and v[0] == v[-1] and v[0] in "\"'": v = v[1:-1] env[k] = v return env
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני350 נק'~22 דק'build
סורק סודות מוקשחים (Pre-commit)
בדיקת production: אף פעם לא מכניסים סודות ל-git. ממש scan_secrets(lines) שמחזיר רשימת (מספר_שורה, סוג) עבור סודות מוקשחים. זהה: (1) מפתח AWS בתבנית AKIA + 16 תווי [0-9A-Z] → 'aws_key'; (2) השמה למשתנה בשם password/secret/api_key/token עם מחרוזת מילולית לא-ריקה → 'secret_assignment'. שורות שקוראות ממשתנה-סביבה (בלי מחרוזת מילולית) אינן סוד. מספור שורות מ-1.
דוגמאות
['x=1', 'password = "hunter2"', 'y=2'] → [(2, 'secret_assignment')]
['key = "AKIAIOSFODNN7EXAMPLE"'] → [(1, 'aws_key')]
פתרון-ייחוס סורק סודות מוקשחים (Pre-commit) ›
import re def scan_secrets(lines: list) -> list: findings = [] aws = re.compile(r'AKIA[0-9A-Z]{16}') assign = re.compile(r'(?i)\b(password|secret|api_?key|token)\b\s*[:=]\s*[\'"][^\'"]+[\'"]') for i, line in enumerate(lines, 1): if aws.search(line): findings.append((i, 'aws_key')) elif assign.search(line): findings.append((i, 'secret_assignment')) return findings
הפתרון נשמר מקומית אוטומטית.