LG 유레카 2기_프론트엔드

[ Web-Security ] XSS 악성 스크립트

ChatjihoiPT 2025. 4. 29. 15:11
 

 

1. JWT

로그인을 증명하는 토큰

인증에 필요한 정보암호화시킨 JWT 토큰으로 인터넷 표준 인증 방식

공개/개인 키를 쌍으로 사용
- Header, Payload, Signature
- 개인 보안성이 뛰어나다.(허나 키 자체의 중요한 개인 정보를 넣으면 안 된다.)

 

1. 기존 cookie랑 session을 통한 로그인 인증 처리

  • 쿠키는 노출되기 때문에 민감 정보까지 노출된다.
  • 세션은 저장소 문제가 발생하면 인증한다.

 

2. 장점
이미 토큰 자체가 인증된 정보이기 때문에 세션 저장소가 필수적으로 필요하진 않다.

3. 단점
JWT는 기본적으로 Claim에 대한 정보를 암호화하지 않다.


추가 개념: Salt

암호(비밀번호)를 해시(hash)하기 전에 추가하는 랜덤한 값

Salt를 추가해서 해시하는 경우
- 랜덤하게 만든 Salt: xyz890
- 합친 값: xyz890password123
- 이걸 해시: k9sd8e1...

→ 결과가 완전히 달라져서, 똑같은 비밀번호라도 Salt가 다르면 해시값이 다르게 나온다.

 


2. Next Auth

Next.js에서 쉽게 로그인(Authentication), 로그아웃(Logout), 세션(Session) 관리를 할 수 있게 도와주는
오픈소스 인증 라이브러리

 

 

  • Google, Kakao, GitHub 같은 OAuth 로그인
  • 이메일/비밀번호 로그인 (Credentials)
  • 세션 유지, 로그인 상태 확인
    이걸 아주 간편하게 만들어주는 게 NextAuth

3. Xss (Cross-site Scripting)

1. 저장형 XSS

공격자가 악성 스크립트를 서버에 저장하여 다른 사용자가 페이지를 방문할 때 자동으로 스크립트가 실행되게 하는 공격

- 게시판, 댓글, 프로필 등에서 발행

 

2. 반사형 XSS

악성 스크립트가 포함된 URL을 사용자가 클릭하면 스크립트가 실행되는 공격

- 서버에 저장되진 않고, 1회성으로 입력을 그대로 반환할 때 발생

- 검색창, 링크 

 

3. Dom 기반 XSS

서버를 거치지 않고 클라이언트 측 스크립트가 위험한 입력을 DOM으로 주입 

const params = new URLSearchParams(window.location.search);
const name = params.get("name");
document.getElementById("result").innerHTML = `안녕하세요 ${name}님`;