더북(TheBook)
# 취약: 약한 해시(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