묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결웹 개발의 핵심, HTTP 완벽 마스터하기!
사전 요청 관련 질문
put, patch, delete 메서드의 경우 options (사전 요청) 을 보내게 된다고 하셨는데요. 물론, 설명 주신것처럼 "Access-Control-Max-Age" 를 통해서 캐싱을 하는 방법도 있겠지만, get 과 post 요청만 사용하는게 (사전 요청을 하지 않으니) 좀 더 효율적인 방법이 될수 있을까요?
-
미해결웹 개발의 핵심, HTTP 완벽 마스터하기!
rest api 에서의 csrf
예제에서 처럼 html 을 response 하지 않고 rest api 를 통해 fe 와 통신하는 경우에도 csrf 를 사용하는 경우가 있을까요? 만약 있다면 어떻게 사용하는지도 알고 싶습니다.
-
미해결웹 개발의 핵심, HTTP 완벽 마스터하기!
하이잭킹 관련 문의
서버 구성해서 직접 만들고 있는데, 입력폼에서 스크립트가 안먹히더라고요. 쭉 강의 보고 실습필요한 부분 다시 보는데 일전에 브라우져 설정을 변경 했었었나요. 기억이 가물합니다! Content-Security-Policy-Report-Only 이 옵션 때문에 가능했던가요.
-
미해결웹 개발의 핵심, HTTP 완벽 마스터하기!
캐싱 관련 문의
수업에서 브라우저 인스펙터의 옵션에서 [캐시 사용안함] 를 off 후 테스트 하셨는데 캐시 사용 안함은 헤더와 상관없이 캐시를 아예 사용안하는 옵션인가요
-
미해결웹 개발의 핵심, HTTP 완벽 마스터하기!
TypeError: querystring is not a function 에러 나시는 분들
querystring.decode(body)로 하시면 해결 가능합니다
-
미해결웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩
버프스위트 response 수정
request의 쿠키 부분 지우고 send 한 다음response의 set-cookie 옆 세션을 user 쿠키로 수정하려고 하는데 경고음만 울리고 수정이 안 됩니다어떻게 해야 응답의 세션 부분 수정이 가능할까요?
-
미해결웹 개발의 핵심, HTTP 완벽 마스터하기!
강사님은 어떤 책으로 HTTP 를 공부하셨나요?
완강 후 책도 한번 읽어보려고 합니다추가로 강의자료 링크를 강의 아래에 달아주시면 좋을 것 같습니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
refreshToken cookie에 저장할때에 템플릿 리터럴 사용하는 부분에서의 질문
//auth.service.ts import { Injectable, UnprocessableEntityException } from '@nestjs/common'; import { UsersService } from '../users/users.service'; import * as bcrypt from 'bcrypt'; import { JwtService } from '@nestjs/jwt'; import { IAuthServiceGetAccessToken, IAuthServiceLogin, IAuthServiceSetRefreshToken, } from './interfaces/auth-service.interface'; @Injectable() export class AuthService { constructor( private readonly userService: UsersService, // private readonly jwtService: JwtService, ) {} async login({ email, password, context }: IAuthServiceLogin) { // 1. 이메일이 일치하는 유저를 DB에서 찾기 const user = await this.userService.findOneByEmail({ email }); // 2. 일치하는 유저가 없으면?! 에러 던지기!!! if (!user) throw new UnprocessableEntityException('존재하지 않는 이메일입니다.'); // 3. 일치하는 유저가 있지만, 비밀번호가 틀렸다면?! const isAuth = await bcrypt.compare(password, user.password); if (!isAuth) throw new UnprocessableEntityException('틀린 암호입니다.'); // 4. refreshToken(=JWT)을 만들어서 브라우저 쿠키에 저장해서 보내주기 this.setRefreshToken({ user, context }); // 5. 일치하는 유저도 있고, 비밀번호도 맞았다면?! // => accessToken(=JWT)을 만들어서 브라우저에 전달하기 return this.getAccessToken({ user }); } getAccessToken({ user }: IAuthServiceGetAccessToken): string { return this.jwtService.sign( { sub: user.id }, { secret: process.env.JWT_SECRET_KEY, expiresIn: process.env.JWT_ACCESS_TOKEN_EXPIRE, }, ); } setRefreshToken({ user, context }: IAuthServiceSetRefreshToken): void { const refreshToken = this.jwtService.sign( { sub: user.id }, { secret: process.env.JWT_REFRESH_SECRET_KEY, expiresIn: process.env.JWT_REFRESH_TOKEN_EXPIRE, }, ); //개발환경 context.res.setHeader( 'set-Cookie', `refreshToken=${refreshToken}; path=/;`, ); // 배포환경 // context.res.setHeader('set-Cookie', `refreshToken=${refreshToken}; path=/; domain=.mybacksite.com; SameSite=None; Secure; httpOnly`); // context.res.setHeader('Access-Control-Allow-Origin', 'https://myfrontsite.com'); } } 리프레쉬 토큰을 생성하는 과정에서 개발환경에 사용하는context.res.setHeader( 'set-Cookie', `refreshToken=${refreshToken}; path=/;`, );이 코드에 'refreshToken'의 이름을 <한글>로 사용하게되면 graphql로 API테스트를 할때 read에 대한 에러를 발생시키더라구요.쿠키의 이름을 바꿔서 생성하려고 했는데 한글로 생성이 되지 않는거는 nodejs의 기본 특성인걸까요!?참고이미지로 아래에 이미지를 붙여봅니다~궁금해요~~~ 이런내용들은 nodejs 공식문서에서 제가 잘 못찾는건지 궁금합니다. 공식문서에도 있을것 같아서 찾아보려고했는데 잘 못찾겠더라구요ㅠㅜ..
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
쿠키 & 세션을 REST API로 개발할 때
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]쿠키에 대해서 알게 되었지만 궁금한점이 있습니다.구글에 검색하다 본 기억이 있는데 쿠키 & 세션을 REST 개발환경에서는 못쓴다고 본적이 있는거 같은데 스프링 부트로 rest형식으로 개발할 때는 쿠키 & 세션을 못쓰는게 맞나요? 만약, 못쓰는게 맞다면 그러면 로그인 유지나 광고 3일 동안 안보겠습니다 같은 쿠키를 사용해야 할 때는 어떤식으로 시켜줘야나요? 리액트와 협업하면 프론트에게 맡겨야 하나요?
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
express server cookie관련 질문 드립니다.!
indexRouter.get('/', (req: Request, res: Response, next: NextFunction) => { console.log(req.cookies); const {name, pwd} = req.cookies; if (!name || !pwd) { res.sendFile(path.join(__viewPath, 'index.html')); } else { res.send(`${name}님 환영합니다!`); }});indexRouter.get('/login', (req: Request, res: Response) => { const {name, pwd} = req.query; const expire = new Date(); expire.setSeconds(30); const cookieOptions = { httpOnly: true, expires: expire, path: '/', }; res.cookie('name', name, cookieOptions) .cookie('pwd', pwd, cookieOptions) .redirect('/');});기존 쿠키서버를 express서버로 적용해보는 과정인데요, /login에서 받은 정보를 쿠키에 담고, redirect로 홈을 호출하고 있는데요,문제는 홈에서 보시면 req.cookies에 쿠키가 담겨있을때가 있고, 없을때가 있습니다."(console.log에서 쿠키값이 없을때: "[Object: null prototype]{}" 쿠키값이 존재할때: "{test:"test"}") 혹시 쿠키가 클라이언트에게 전송되기전에 redirect가 먼저 발생하여 쿠키값이 없어, index.html을 내보내는걸까요?6번 정도 시도한다고 가정할때 두번정도 쿠키값이 정상으로 전송되고, 나머지 4번 정도가 쿠키값이 없는 상태로 index가 호출됩니다;(정상결과와 아닌것은 순서가 없습니다;; 운이 좋으면되고 안좋으면 안되는 느낌입니다...)혹시 비동기 작업이랑 관련이 있을까여?
-
미해결
cookie 가 제대로 카운트 되지 않아요
get_cookie 를 통해서 어떠한 기능의 쿠키를 저장하고android와 ios에서 save_cookie로저장된 쿠키의 수가 10번 이상이면 모달화면을 띄우고 있어요cookie가 바르게 카운트 되지 않을 때는 어떻게 하면 좋을까요?!
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
쿠키 이해하기 강의 질문
쿠키 강의에서 18:00 부분 질문있습니다 아래 코드에서 처음에는 login으로 들어가서 로그인창이나옵니다 그리고 서버에서는 set cookie로 응답을 보내겠죠? 그러고 끝이 나야하는데 왜 처음 로그인할때는 ~~님 환영합니다 까지 뜨는건가요? 요청은 제가 한번 보낸것 아닌가요? 요청(처음로그인) -> 응답(302,쿠키 보내기) .. 여기서 재 요청을 하면 else if(cookies.name)이 작동해야하지만 왜 한번만 요청을 했는데 login , cookies.name 이렇게 2개가 작동하는건가요? if (req.url.startsWith('/login')) { const { query } = url.parse(req.url); const { name } = qs.parse(query); const expires = new Date(); // 쿠키 유효 시간을 현재시간 + 5분으로 설정 expires.setMinutes(expires.getMinutes() + 5); res.writeHead(302, { Location: '/', 'Set-Cookie': `name=${encodeURIComponent(name)}; Expires=${expires.toGMTString()}; HttpOnly; Path=/`, }); res.end(); // name이라는 쿠키가 있는 경우 } else if (cookies.name) { res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end(`${cookies.name}님 안녕하세요`); } else {
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
getServerSideProps 쿠키 이슈 관련해서 질문드립니다! 도와주세요ㅠ
안녕하세요, 제로초님 강의 잘 들었습니다. 강의를 듣고 혼자서 프로젝트를 진행하는데 너무 막히는점이 있어서 질문드립니다. 마이페이지에서 유저 정보를 불러오는 작업을 하고 있습니다. 토큰을 받아서 쿠키에 저장하여 사용하고 있는데.. 배포시에 저 말고 다른 사람도 저의 토큰으로 요청을 보내는 모습이 발견되었는데 해결을 못하고 있어요ㅠ 로초님 강의 후반부에서 보긴봤었는데 상황이 약간 다른거 같아서 질문드려요ㅠ saveCookies는 쿠키를 받아서 디스패치하여 스토어에 저장하는 함수이고 createCustomHeader는 Authorization : {`Bearer ${token}`}을 리턴하는 함수입니다. export const getServerSideProps = wrapper.getServerSideProps( (store) => async (context) => { saveCookies(store, context); const rootState: RootState = store.getState(); const user_id = rootState.loginState.user_id; axiosInstance.interceptors.request.use( async function (config) { try { config.headers = null; if (context.req && context.req.headers.cookie) { const allCookies = cookies(context); const accessToken = allCookies.accessToken; config.headers = createCustomHeader(accessToken); } return config; } catch (error) { console.log(error); } }, function (error) { return Promise.reject(error); }, ); store.dispatch(getUserInfoInMypageRequest(user_id)); store.dispatch(END); await store.sagaTask.toPromise(); return { props: {}, }; }, );
-
미해결Nuxt.js 시작하기
Nuxt 에서 Cookie 사용이 잘 안되네요..ㅠ.ㅠ
안녕하세요. 기초강의부터 Nuxt 강의까지 많이 도움을 받았습니다. 다름 아니라... Nuxt 에서 쿠키를 사용할려고 하는데 생각처럼 잘 안되네요... 로그인 구현후 인증값을 쿠키로 저장하고 store 의 state에 쿠키값이 존재시 state 의 데이터를 초기화 할려고 합니다. import Cookies from "js-cookie"; export const state = () => { userName = Cookies.get('userName') || ''; } store/index.js 에 위와 같이 state 값이 쿠키값을 초기화할려고 합니다. 하지만 userName 에 쿠키값이 초기화되지 않습니다. nuxtServerInit 등 여러삽질을 해봤지만 해결점을 찾지 못했습니다. Nuxt 에서 쿠키활용에 대해 설명해주시면 많은 도움이 될거같습니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
domain과 path는 어떻게 상호작용하나요?
쿠키의 도메인을 naver.com이라고 지정했습니다. 쿠키는 blog.naver.com 과 www.naver.com 에서 모두 보내집니다. www.naver.com/some 하위 경로에만 쿠키를 보내고 싶어서 path는 /some이라고 지정했습니다. 이 때 blog.naver.com에는 /some이라는 패스가 없다면 쿠키가 쿠키가 무시되고 만약 /some이라는 패스가 존재한다면 보내지게 되나요?
-
해결됨Vue로 Nodebird SNS 만들기
Nginx Cookie 설정
안녕하세요. 현재 강의를 수강 중에 https 설정 후 발생하는 문제가 있어서 질문드립니다. 현재 모든 강의를 수강하고 SSL 인증서를 적용하는 제로초님 블로그의 글을 따라 하고 있는데로그인은 되지만 로그아웃이 되지 않는 현상이 발생합니다.개발자도구 - 네트워크에 응답으로 withcredential 예외 응답이 오는 걸로 봐서는 쿠키 설정에 문제가 있는 것으로 추측됩니다.(Nginx 설정은 블로그에 있는 설정에 도메인만 바꿔서 적용하였고 다른 부분은 바꾼 것이 없습니다.)Nginx 설정에 쿠키를 보낼 수 있도록 적용하면 될거 같은데 혹시 다른 문제이진 않은가 걱정이 되어 글을 남깁니다.또한 혹시 https를 적용하고 또 설정해줘야 하는 부분이 짐작되는 것이 있으시다면 조언해주시면 감사하겠습니다.
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
배포 후 log out 쿠키 삭제
안녕하세요. 현재 제로초님과 같은 코드로 passport-local로 로그인과 로그아웃을 구현하였습니다. 배포 후 https환경에서 log out하였을때 브라우저 상에서 쿠키가 삭제되지 않는것 같아서 질문드립니다 ㅠ 프론트와 백엔드는 같은 도메인을 사용하고 있고 서브도메인만 다른 상황입니다 ! (프론트: dimelo.io, 백엔드: api.dimelo.io) (https://stackoverflow.com/questions/13758207/why-is-passportjs-in-node-not-removing-session-on-logout 여기 글을 보고 req.session.destroy(function() { res.clearCookie('connect.sid'); }); 이렇게 해보았지만 그래도 안됐습니다 ...)
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
express aws 배포 후 세션 - 쿠키
선생님, 안녕하세요. 사실 이 질문이 여기에 해도 되는 질문인지 잘 모르겠지만 답변해주시면 감사하겠습니다. nest.js를 학습하기에 앞서 express 를 복습하고자 전에 개인적으로 만들었던 거를 한번 복습 후, 이번에 aws ec2에 배포까지 해보게 되었습니다. 로그인을 session으로 구현하였는데, 로컬에서는 클라이언트에 쿠키가 잘 전달 되었지만, ec2에 올리고 난 후 클라이언트에 쿠키가 전달되지 않아 도움을 청하고자 합니다. 우선 서버쪽 CORS 설정과 세션 설정은 이렇게 해주었습니다. app.use( cors({ origin: [ 'https://jh-client.ga' // 배포한 client url ], preflightContinue: true, credentials: true, }) ); app.use( session({ secret: 'jjj', proxy: true, store: new RedisStore({ client: redisClient, ttl: 3600 * 24 * 3, //3600초 = 1시간 // ttl: 10, }), saveUninitialized: true, resave: false, name: 'MySessionKey', cookie: { sameSite: 'none', secure: true, // httpOnly : true, // maxAge: 1000 * 60 * 60, // 1000밀리세컨드 : 1초 maxAge: 1000 * 60 * 60 * 5, }, }) ); 클라이언트와 server 모두 ACM을 통해 https 설정을 해주었고, 클라이언트에는 cloud front, 서버에는 elastic load balancer 도 적용해주었습니다. stack over flow나 다른 곳들을 찾아본 결과, sameSite = 'none', secure = true 설정을 해주면 대부분 된다고 하던데 (물론 클라이언트에서 axios 요청을 보낼때도 withCredentials : true 설정을 해주었습니다.) 저는 이것 외에도 추천하는 다양한 방법들을 시도해보았지만 잘 해결되지 않아 너무 답답한 마음에 질문 드렸습니다. 꼭 답변해주시면 감사하겠습니다 감사합니다~~
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
getServersideProps session 질문
안녕하세요! 강좌를 바탕으로 블로그를 제작하는 중에, 방문자 수를 counting 하는 기능을 구현하는데 막혀 질문드립니다. front server에서 getServerSideProps에 있는 export const getServerSideProps = wrapper.getServerSideProps(async (context) => { const cookie = context.req ? context.req.headers.cookie : ''; axios.defaults.headers.Cookie = ''; if (context.req && cookie) { axios.defaults.headers.Cookie = cookie; } context.store.dispatch({ type: LOAD_MY_INFO_REQUEST, }) context.store.dispatch({ type: LOAD_POSTS_REQUEST, }); context.store.dispatch(END); await context.store.sagaTask.toPromise(); }); LOAD_MY_INFO_REQUEST와 LOAD_POSTS_REQUEST를 이용해 back server에 요청을 날리면 back server에서는 app.js의 최상단에 존재하는 let count = 0; app.use((req,res,next) => { var date = new Date(); var today=date.getYear()+" "+date.getMonth()+" "+date.getDate(); console.log("lastvisit : " + req.session.lastVisit); if(req.session.lastVisit != today){ req.session.lastVisit = today; count++; } next(); }); 다음 함수를 이용해 방문자 수를 count할려고합니다! 문제는 front에서 먼저, LOAD_MY_INFO_REQUEST로 요청을 보내, session과 함께 응답을 받고 다시 LOAD_POSTS_REQUEST요청을 하면, 요청에는 첫번째 요청의 응답으로 넣어주었던 session이 존재하지 않는다는 점입니다. 몇일동안 잡고 있어도 도저히 해결책을 모르겠어 질문드립니다.
-
미해결화이트해커가 되기 위한 8가지 웹 해킹 기술
팝업창의 BEEFHOOK 정보 제거
스크립트 태그로 low 단계의 쿠키정보를 불러오는 곳에서 beef 까지 실습을 한 후 다시 쿠키정보를 불러오려니까 팝업창에 실습시 뜨는 쿠키정보와 더불어 BEEFHOOK 정보까지 같이 뜨는데 원래 보이는 것처럼 이를 없애고 싶습니다. 어떻게 되돌리나요?