라라벨은 기본적으로 보안이지만, 오버라이드하면 위험하다
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Laravel 개발자, 특히 보안 실무 경험이 적은 중급 개발자
핵심 요약
- Laravel의 기본 설정은 보안에 유리하지만,
APP_DEBUG
설정 오류나 CSRF 보호 누락 등으로 취약점이 발생할 수 있다 - XSS 공격 방지 위해 Blade 템플릿에서
{!! !!}
대신{{ }}
사용 필수 - 파일 업로드 시
public/
폴더 직접 저장 금지, MIME 타입 검증 필수
섹션별 세부 요약
1. APP_DEBUG 설정 오류
APP_DEBUG=true
로 프로덕션 배포 시, 스택 트레이스가 노출되어 파일 경로, 환경 변수, 데이터베이스 비밀번호가 노출- CI/CD 스크립트에
APP_ENV=production
과APP_DEBUG=false
자동 적용 권장
2. CSRF 보호 누락
- API, AJAX 라우트에서 CSRF 보호를 수동으로 제외하면 공격 가능
- API 인증은 Token 기반(Sanctum, Passport) 사용 권장
3. XSS 취약점
- Blade 템플릿에서
{!! $comment->body !!}
사용 시, XSS 공격 위험 - HTMLPurifier 라이브러리 사용 또는
{{ }}
사용 권장
4. 파일 업로드 취약점
- 사용자 업로드 파일을
public/
폴더에 직접 저장하면 PHP 파일 위장 공격 가능 - MIME 타입 검증 및 확장자 검증 필수
5. Raw Query 사용 위험
DB::select("SELECT * FROM users WHERE email = '$email'")
사용 시 SQL 인젝션 가능성- 쿼리 바인딩(
?
사용) 또는 Eloquent 사용 권장
6. 정책 적용 누락
- API 엔드포인트, 리소스 컨트롤러, 백그라운드 작업에서 정책(
$this->authorize()
또는@can()
) 미적용 시 권한 격차 발생 - 재사용 가능한 역할-권한 모델 사용
결론
- Laravel의 보안 기능은 사용자가 올바르게 적용해야 효과적
- 보안 습관 개발 필수: "사용자가 악용했을 경우", "해커가 시도할 수 있는 방법" 등을 항상 고려
- 보안 실무를 심화하고자 하는 경우, Bulletproof Laravel: Write Code That Hackers Hate 도서 참조 권장