삭제 버튼을 관리자에게만 숨겼는데, Server Action 안에는 권한 검사가 없나요? 버튼을 감추는 코드는 화면을 정리할 뿐 요청을 막지 못합니다. Server Action은 서버에서 실행되지만 클라이언트가 네트워크로 호출할 수 있는 진입점입니다. 함수에 전달된 postId 같은 값도 클라이언트가 바꿀 수 있다고 보고 처리해야 합니다. '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 } }); } 순서는 분명합니다. 먼저 입력을 검증하고 현재 세션을 확인한 다음, 그 사용자가 해당 리소스를 바꿀 권한이 있는지 검사합니다. 로그인 여부만 확인하면 다른 사용자의 postId로 요청하는 경우를 막지 못합니다. 미들웨어, 레이아웃 가드, 숨긴 버튼은 빠른 화면 제어에는 쓸 수 있습니다. 민감한 변경의 최종 보안 경계는 Server Action 내부에 두세요. 공통 검사는 Data Access Layer로 모아도 각 Action이 그 검사를 호출해야 합니다. 지금 actions 파일을 열어 세션 검사와 리소스 단위 인가가 모두 있는지 확인해 보세요. #React #Nextjs #웹보안IT 엔지니어
Server Action 안에서도 인증과 인가를 다시 확인하세요
08월 31일 | 조회수 27
1
1435
댓글 0개
공감순
최신순
- 등록된 댓글이 없습니다
첫 댓글을 남겨주세요
추천글