Laravel에서 SaaS 데이터 유출 방지하기
B2B SaaS를 운영하고 있다면, 고객 데이터를 반드시 분리하여 관리해야 합니다.
많은 개발자들이 테넌트 필터(tenant filters)를 수동으로 추가합니다. 모든 쿼리에 where 절을 직접 추가하는 방식입니다.
이는 휴먼 에러(human error)로 이어집니다. 개발자가 리포트 작성 시 코드 한 줄을 누락하면, 고객 A가 고객 B의 데이터를 보게 됩니다. 이는 재앙입니다.
Global Query Scopes를 사용하여 이 과정을 자동화하세요.
절차는 다음과 같습니다:
Scope 클래스를 구축합니다. 이 클래스는 현재 테넌트 ID를 찾아 모든 데이터베이스 조회에 필터를 추가합니다.
Trait를 생성합니다. 이 Trait는 Scope를 등록하며, 새로운 레코드를 생성할 때 테넌트 ID를 설정합니다.
모델에서 해당 Trait를 사용합니다. 이렇게 하면 컨트롤러를 깔끔하게 유지할 수 있습니다.
이제 제로 트러스트(zero-trust) 계층이 확보되었습니다. Invoice::all()과 같은 단순한 호출조차도 안전하게 유지됩니다.
보안은 이제 설계의 일부가 됩니다. 더 이상 수동으로 확인해야 할 체크리스트가 아닙니다.
출처: https://dev.to/iprajapatiparesh/prevent-saas-data-leaks-automated-eloquent-scopes-in-laravel-f6o