설명
프로필이나 계정 조회 API가 요청자가 제공한 사용자 ID를 그대로 사용하고 소유권이나 권한을 확인하지 않으면 다른 사용자의 데이터가 노출될 수 있습니다.
잠재적 영향
- 공격자가 URL 또는 쿼리의 ID 값을 바꿔 다른 사용자의 개인정보, 계정 정보, 결제 정보를 조회할 수 있습니다.
- 관리자 전용 데이터나 내부 식별자가 외부 사용자에게 노출될 수 있습니다.
해결 방법
프로필 조회에는 인증을 요구하고, 요청한 ID가 현재 사용자와 일치하는지 또는 관리 권한이 있는지 서버에서 검증합니다.
예시
변경 전
csharp
[HttpGet("profile/{id}")]
public IActionResult GetProfile(int id)
{
return Ok(repository.Find(id));
}
변경 후
csharp
[Authorize]
[HttpGet("profile/{id}")]
public IActionResult GetProfile(int id)
{
if (id != CurrentUserId()) return Forbid();
return Ok(repository.Find(id));
}
설명:
- 변경 전: 명시적인 권한 부여 또는 소유권 검사 없이 사용자 id를 받는 프로필 엔드포인트는 다른 사용자의 레코드를 노출할 수 있습니다.
- 변경 후: 예시는 인증된 사용자 본인의 프로필만 허용합니다. 구현이 생략된
CurrentUserId()는 요청 입력이 아닌 검증된 인증 주체에서 ID를 얻어야 합니다. 관리자 접근이 필요하면 별도의 서버 측 권한 정책으로 검증하세요.