서버에서 실행된다는 이유만으로 Server Action이 자동으로 보호되지는 않습니다. 클라이언트는 Server Action을 네트워크로 호출하고 인수도 직접 보냅니다. 따라서 postId 같은 값은 신뢰하지 않는 입력으로 보고, 함수 안에서 현재 사용자와 대상 리소스의 권한을 확인해야 합니다. 영상의 Before는 전달받은 postId로 곧바로 게시물을 삭제합니다. After는 세션을 확인하고 게시물 소유자와 현재 사용자를 비교한 뒤 삭제합니다. 'use server'; export async function deletePost(data) { const { postId } = deletePostSchema.parse(data); const session = await verifySession(); if (!session) throw new Error('Unauthorized'); const post = await db.post.findUnique({ where: { id: postId } }); if (!post || post.ownerId !==
) { throw new Error('Forbidden'); } await db.post.delete({ where: { id: postId } }); } 버튼 숨김, 미들웨어, 레이아웃 가드는 화면 접근을 빠르게 제어하는 장치입니다. 민감한 변경을 허용할지는 Server Action 내부에서 최종 판단하세요. 로그인 확인과 리소스 단위 인가는 서로 다른 검사입니다. 영상처럼 입력 검증 → 인증 → 리소스 단위 인가 → 변경 순서로 actions 파일을 점검해 보세요. #React #Nextjs #웹보안IT 엔지니어
서버에서 실행돼도 Server Action의 입력은 신뢰하지 마세요
08월 31일 | 조회수 56
1
1435
댓글 0개
공감순
최신순
- 등록된 댓글이 없습니다
첫 댓글을 남겨주세요
추천글