본문으로 건너뛰기

Rails 애플리케이션에서 ID를 숨기는 가장 효율적인 방법

Ruby on Rails #235 Easiest way to hide all user-facing IDs

작성자
SupeRails
발행일
2025년 03월 31일
https://www.youtube.com/watch?v=yJpG6i9kicY

핵심 요약

  • 1 애플리케이션 URL 및 마크업에 ID 노출은 보안 취약점 및 경쟁사 분석의 위험을 초래합니다.
  • 2 기존 ID 숨김 Gem들은 슬러그 속성 추가, 커스텀 파인더 사용 등 각각의 구현상 제약이 존재합니다.
  • 3 Bullet Train의 `ObfuscatedId` Concern과 `hash_ids` Gem을 활용하여 최소한의 변경으로 ID를 효과적으로 숨길 수 있습니다.

도입

웹 애플리케이션에서 리소스의 데이터베이스 ID가 URL이나 HTML 마크업에 직접 노출되는 것은 일반적인 관행이지만, 이는 여러 보안 및 비즈니스적 위험을 내포합니다. 예를 들어, 경쟁사가 노출된 ID를 통해 서비스의 성장률을 추정하거나, 잠재적인 보안 취약점을 악용할 수 있습니다. 이러한 문제를 해결하기 위해 ID를 숨기거나 난독화하는 다양한 방법이 모색되어 왔으며, 본 영상에서는 Rails 애플리케이션에서 ID를 효과적으로 숨기는 간결한 솔루션을 제시합니다.

ID 숨김의 필요성

애플리케이션의 URL이나 마크업에 데이터베이스 ID가 노출되면 다음과 같은 문제가 발생할 수 있습니다.

  • 보안 취약성: ID를 통해 리소스에 직접 접근하거나 유추할 수 있어 보안 위험이 증가합니다.

  • 경쟁사 분석: 경쟁사가 ID를 기반으로 서비스의 성장률이나 총 리소스 수를 추정할 수 있습니다.

기존 ID 숨김 솔루션 및 한계

다양한 Ruby Gem들이 ID 숨김 기능을 제공하지만, 각각의 한계가 존재합니다.

  • Friendly ID: 모든 모델에 slug 속성 추가 및 업데이트 필요.

  • Slugifiable: slug 마이그레이션 추가 필요.

  • Hashid-rails: 5년 이상 업데이트되지 않았으며, 기본 find 메서드 대신 find_by_hash_id 사용 필요.

  • ID Gem: 기본 Rails find 메서드 미지원, find_by_id 대신 find_by 사용 필요.

  • Prefixed ID: 생성되는 ID가 매우 길어질 수 있으며, 일부 find 메서드에 find_by_prefix_id 사용 필요.

Bullet Train의 ObfuscatedId Concern 활용

이러한 한계점을 극복하고 ‘드롭인(drop-in)’ 솔루션을 제공하는 방법으로 오픈소스 Rails 보일러플레이트인 Bullet Train에서 사용되는 ObfuscatedId Concern을 활용합니다. 이 Concern은 hash_ids Gem과 함께 작동하며, 다음과 같은 특징을 가집니다.

  • 간편한 통합: ApplicationRecordinclude ObfuscatedId만 추가하면 됩니다.

  • 기존 find 메서드 지원: Rails의 기본 find 메서드를 오버라이드하여 추가적인 코드 변경 없이 숨겨진 ID를 사용할 수 있도록 합니다.

  • to_param 오버라이드: to_param 메서드를 오버라이드하여 URL에 해시된 ID를 자동으로 표시합니다.

구현 단계

  1. app/models/concerns/obfuscated_id.rb 파일 생성 후 Bullet Train 소스 코드에서 ObfuscatedId Concern 코드를 복사합니다. (출처 명시 권장)

  2. Gemfilegem 'hash_ids'를 추가하고 bundle install을 실행합니다.

  3. app/models/application_record.rb 파일에 include ObfuscatedId를 추가합니다.

  4. Rails 콘솔 또는 애플리케이션 서버를 재시작하여 변경사항을 적용하고, organization.to_param 등을 통해 해시된 ID가 정상적으로 출력되는지 확인합니다.

결론

본 영상에서 소개된 Bullet Train의 `ObfuscatedId` Concern과 `hash_ids` Gem을 활용한 ID 숨김 방식은 Rails 애플리케이션에서 최소한의 노력으로 ID를 난독화하는 가장 효율적이고 간결한 방법 중 하나입니다. 이 '드롭인' 솔루션은 기존 코드베이스에 큰 변경 없이 적용 가능하며, URL 및 마크업에서 ID 노출로 인한 보안 및 비즈니스적 위험을 효과적으로 줄여줍니다. 이는 애플리케이션의 전반적인 보안 수준을 향상시키고 사용자 경험을 개선하는 데 기여할 것입니다.

댓글0

댓글 작성

댓글 삭제 시 비밀번호가 필요합니다.

이미 계정이 있으신가요? 로그인 후 댓글을 작성하세요.

0/1000
정중하고 건설적인 댓글을 작성해 주세요.