TIL

24/02/15 TIL __ XSS 공격이 들어온다면(유저테스트)

GABOJOK 2024. 2. 16. 02:17

유저테스트를 진행했는데, 캠프 동기분들께서 테스트를 도와주셨다.
그중 미처 생각하지 못했던 문제가 있었는데
바로 xss공격에 대한 대응이 없었다는것..
xss 공격에 대해 덕분에 알게 되었다.
이는 실제 서비스에서 조심해야하는 부분이기에 이게 어떤거고,
어떤 방법으로 대응해야 하는지 찾아보았다.

XSS 공격이란?

  • sql injection과 함게 웹상에서 가장 기초적인 취약점 공격 방법 중 하나
  • 권한이 없는 사용자가 악의적인 용도로 웹사이트에 스크립트를 삽입하는 공격 기법.
  • 다른 웹사이트와 정보를 교환하는 식으로 작동해 사이트간 스크립팅 이라고 한다.
  • 여전히 웹 취약점 빈도수 상위 10위권에 있는 공격이다. 보안 기법이 많이 나왔지만, 우회 기법도 많이 생겨났다.
  • 주로 사용자의 세션을 서버로 전송해 탈취하거나, 악성코드가 있는 페이지로 리다이렉트 하는 방법으로 공격한다.

xss 공격이 일어나는 순서

  • 사용자가 xss공격 링크가 포함된 웹페이지를 들어간다.
  • (예를들면, 링크 클릭을 유도한다던지, 해킹된 사이트에 접속하면 악성 스크립트가 존재한다던지, 악성 광고 클릭을 하는 경우라던지)
  • 이때 사용자가 해당 링크를 클릭하면 헤커의 스크립트에 접근되고, 사용자의 브라우저에 해커의 스크립트가 실행된다.

XSS 대응 방안

  • 사용자 입력에 대해 무조건 의심하고 검증할 것.
  • 입력값에 대한 검사는 서버에 데이터가 입력하기 전에 검사하는게 좋다.
  • 예를들면 쿼리스트링 값이 주소에 있다면, 이 값을 숫자로만 허용한다는 식의 대응을 할 수 있다.

아래는 xss공격을 막기 위해 고려해야 할 부분에 대해 잘 나와 있어서 함께 적는다.

※ XSS 공격을 방지하는 7계명

  1. 허용된 위치가 아닌 곳에 신뢰할 수 없는 데이터가 들어가는것을 허용하지 않는다.
  2. 신뢰할 수 없는 데이터는 검증을 하여라.
  3. HTML 속성에 신뢰할 수 없는 데이터가 들어갈 수 없도록 하여라.
  4. 자바스크립트에 신뢰할 수 없는 값이 들어갈 수 없도록 하여라.
  5. CSS의 모든 신뢰할 수 없는 값에 대해서 검증하여라.
  6. URL 파라미터에 신뢰할 수 없는 값이 있는지 검증하여라.
  7. HTML 코드를 전체적으로 한번 더 검증하여라.

이제 다시 프로젝트로 넘어가서
우리에게 있었던 이슈는 다음과 같다.

 

 

 

1.input태그에 script나 다른 태그를 넣었을때 작동하는 이슈가 있었다.

 

기존에는 insertAdjacentHTML로 되어 있었는데 이부분 때문에 인풋 란에 모든 테그들이 등록되었다.
이미지며 그림이며 아주 화려한 것들이 올라왔었던,, 유저테스트..ㅋㅋㅋ

 

 

생각이 짧았다. 태그를 등록할 수 있다면 보안적으로도 문제가 컷기에,
문게자 발견되자 마자, 아래와 같이 바꿔주었다.

const chatListDiv = document.createElement('div');
chatListDiv.classList.add('chatList');

const nicknameSpan = document.createElement('span');
nicknameSpan.classList.add('chatNickname');
nicknameSpan.textContent = nickname + ' ';
const messageText = document.createTextNode(msg);

chatListDiv.appendChild(nicknameSpan);
chatListDiv.appendChild(messageText);
chatBox.appendChild(chatListDiv);

 

 

우리에게 있었던 이슈 2

 

또 추가적으로 현재 url에 어떤 쿼리스트링을 붙이면 그대로 다 접근이 가능한 이슈도 있었는데,
뒤늦게 확인해 보니, 현재 채널 id값을 변경해서 주소에 입력해도 접근이 가능한 문제점도 발견됬다.

이부분들을 모두 실존하는 channelId 가 아니라면 정상적인 접근이 아니라는 처리를 해주었다.

 

xss공격에 대해 단편적으로 처리를 했지만,
이부분은 추후 좀더 공부해야 할 부분으로 생각된다.
보안은 서비스 유지 여부와도 직결되는 문제이기 때문에 꼭 봐야겠다.