# 취약: 약한 해시(MD5) + 타이밍 안전 비교 없음
@app.route("/login", methods=["POST"])
def login():
j = request.get_json(force=True, silent=True) or {}
username = j.get("username", "")
password = j.get("password", "")
# 민감 정보를 로그에 남김
print(f"[DEBUG] login attempt user={username} pw={password}")
h = hashlib.md5(password.encode("utf-8")).hexdigest()
conn = sqlite3.connect(DB_PATH)
cur = conn.cursor()
cur.execute("SELECT password_md5 FROM users WHERE username=?", (username,))
row = cur.fetchone()
conn.close()
if not row:
return {"error": "invalid"}, 401
if row[0] == h: # 타이밍 안전 비교 미사용
# 취약: 보안용으로 부적절한 토큰 생성
token = str(random.random())
return {"ok": True, "token": token, "api_token": API_TOKEN} # 비밀 값 노출
return {"error": "invalid"}, 401