서버 사이드 코드에서 전역 변수 사용을 멈춰다오

성태팍·2024년 11월 27일
post-thumbnail

후배가 커밋해놓은 서버 사이드 코드에서 세션 관리 시에 전역 변수가 잘못 들어가 있는 것을 발견했다.

어쩐지 세션 상태가 오락가락 하더라...

간단한 예시를 들면

// 전역 변수로 사용자 세션 정보 관리 (잘못된 방법)
let currentUserSession: any = null;

export async function authenticate(req: Request, res: Response) {
  const { username, password } = req.body;

  // 인증 로직
  if (username === "admin" && password === "password123") {
    currentUserSession = { username, role: "admin", timestamp: Date.now() }; // 세션 생성
    res.status(200).json({ message: "Authentication successful", session: currentUserSession });
  } else {
    res.status(401).json({ message: "Invalid credentials" });
  }
}

export async function getProfile(req: Request, res: Response) {
  // 세션 확인
  if (!currentUserSession) {
    res.status(401).json({ message: "Unauthorized" });
    return;
  }

  res.status(200).json({ profile: currentUserSession });
}

위와 같은 코드에서는 무슨 일이 발생하느냐,

  • currentUserSession이 모든 요청에서 공유되기 때문에 한 사용자의 세션 정보가 다른 사용자에게 노출될 수 있다.
  • 사용자 A가 먼저 로그인 했는데 사용자 B가 프로필 요청 시에 B에게 A의 세션 정보가 return

개발 환경에서는 충분히 발생할 수 있는 문제기에 구두로만 주의를 주고 끝냈다.

전역 변수를 써야겠다 싶은 데이터는 정적인 데이터(Secret_key, priv_key, version, env_path 등등..) 반드시 읽기 전용으로 사용되는 값만 사용해야 한다!

부디 다음부터는 신경써다오...

profile
안녕하세요. 반갑습니다. 건강하세요.

0개의 댓글