From 21bd3fa4caf9d837b880c36d44512967cd4ae38e Mon Sep 17 00:00:00 2001 From: wonderlandpark Date: Mon, 22 Mar 2021 12:49:39 +0900 Subject: [PATCH] chore: preventing csrf at vote page --- pages/bots/[id]/index.tsx | 2 +- pages/bots/[id]/vote.tsx | 28 +++++++++++++++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/pages/bots/[id]/index.tsx b/pages/bots/[id]/index.tsx index b7797bf..632d0e4 100644 --- a/pages/bots/[id]/index.tsx +++ b/pages/bots/[id]/index.tsx @@ -124,7 +124,7 @@ const Bots: NextPage = ({ data, date, user, theme, csrfToken }) => { } - +

하트 추가 diff --git a/pages/bots/[id]/vote.tsx b/pages/bots/[id]/vote.tsx index 6d69766..26b2fab 100644 --- a/pages/bots/[id]/vote.tsx +++ b/pages/bots/[id]/vote.tsx @@ -3,7 +3,7 @@ import Link from 'next/link' import dynamic from 'next/dynamic' import { useRouter } from 'next/router' -import { Bot, CsrfContext, User } from '@types' +import { Bot, CsrfContext, Theme, User } from '@types' import { get } from '@utils/Query' import { makeBotURL, parseCookie, checkBotFlag } from '@utils/Tools' @@ -11,6 +11,8 @@ import { ParsedUrlQuery } from 'querystring' import NotFound from 'pages/404' import { getToken } from '@utils/Csrf' +import Captcha from '@components/Captcha' +import { useState } from 'react' const Container = dynamic(() => import('@components/Container')) @@ -21,11 +23,15 @@ const Segment = dynamic(() => import('@components/Segment')) const SEO = dynamic(() => import('@components/SEO')) const Advertisement = dynamic(() => import('@components/Advertisement')) -const VoteBot: NextPage = ({ data, csrfToken }) => { - console.log(csrfToken) +const VoteBot: NextPage = ({ data, csrfToken , theme}) => { + const [ votingStatus, setVotingStatus ] = useState(0) const router = useRouter() if(!data?.id) return - if((checkBotFlag(data.flags, 'trusted') || checkBotFlag(data.flags, 'partnered')) && data.vanity && data.vanity !== router.query.id) router.push(`/bots/${data.vanity}`) + if(csrfToken !== router.query.csrfToken) { + router.push(`/bots/${data.id}`) + return <> + } + if((checkBotFlag(data.flags, 'trusted') || checkBotFlag(data.flags, 'partnered')) && data.vanity && data.vanity !== router.query.id) router.push(`/bots/${data.vanity}/vote?csrfToken=${csrfToken}`) return = ({ data, csrfToken }) => { {data.votes}} dark />

{data.name}

12시간 뒤에 다시 투표하실 수 있습니다.

- +
+ { + votingStatus === 0 ? + : votingStatus === 1 ? setVotingStatus(2)}/> + :

해당 봇에 투표했습니다!

+ } +
+ @@ -70,6 +83,7 @@ interface VoteBotProps { vote: boolean data: Bot user: User + theme: Theme } interface Context extends CsrfContext {