minho-jang / i-like-this-page

It's a widget that allows visitors to mark "LIKE" on your page.
1 stars 0 forks source link

It's ambiguous to distinguish client by ip address. #36

Closed minho-jang closed 3 years ago

minho-jang commented 3 years ago

IP 주소를 사용하여 클라이언트를 구분하는 것은 모호하다. 동적 IP를 할당받았거나, 방화벽이 있거나, 프록시가 있는 경우 적절하지 않은 IP 주소를 활용하게 되므로 다른 방식을 고려할 필요가 있다.

minho-jang commented 3 years ago

쿠키와 uuid를 이용하여 식별한다.

  1. 쿠키에 uuid가 없으면, uuid를 발급하여 쿠키에 저장한다.
  2. 좋아요를 누르면, uuid와 url을 DB에 보내서 저장한다.

이런 방식이 더 나아 보인다. 사용자가 쿠키를 삭제하거나, 다른 브라우저로 이용하는 것까지 커버할 순 없지만, IP 주소를 활용하여 생기는 문제점은 해결할 수 있다.

minho-jang commented 3 years ago

프론트에서 uuid를 직접 저장하는 방식은 사용자가 쿠키 내의 uuid를 조작할 경우도 있을 수 있다. 조작된 uuid는 서버에서 에러를 발생시킬 수 있으므로 피해야한다.

서버에서 토큰을 받아서 저장하는 방식을 생각해 볼 수 있다. 서버에서 JWT를 발급하여 클라이언트가 그것을 저장하고, 좋아요를 클릭하여 API를 호출하면 토큰을 통해 무결성을 확인할 수 있다. 토큰에는 서버에서 발급한 uuid를 담고 있어야한다.

minho-jang commented 3 years ago

서버에서 쿠키를 설정하지 못한다. 프론트엔드(클라이언트)와 백엔드(서버)의 도메인이 다른 경우, 쿠키를 추가할 수 없는 듯 하다. (조사 필요)

이 프로젝트를 상용화하기 위해서는 HTTPS로 적용해야하기 때문에, 도메인 구매 및 SSL 적용을 끝낸 후, 쿠키가 아닌, JWT를 로컬 스토리지에 저장하는 방식으로 접근하자