웹 취약점의 xss 해결

신재원·2024년 4월 13일
0

diary

목록 보기
124/125

들어가기에 앞서 현재의 상황과 어떠한 방법으로 해결했는지 작성 해보고자 합니다.

현재 상황으로는 회사에서 프로젝트를 들어가게 되면서, 공지 사항(게시판) 쪽에 대해 회사 프레임워크 (솔루션)을 기반으로 기능을 구현해야 하는 상황이였다.
(아직 3개월된 신입 개발자)

→ 요기서 사수분이 웹 취약점에 대해서 학습해보면 좋을 것 같고 웹 취약점을 방어 할 수 있게 기능을 구현해 보라고 하셨다.

→ 아래의 이미지가 내 상황과 유사한것 같아서 가져와 봤다.
(대충 해커가 게시판에 함정 을 심는 짤)

이미지 출처 : https://wikidocs.net/127508

웹 취약점 이란 ?

먼저 웹 취약점이 뭔지 개념에 대해 알아볼려고 한다.

간단히 말하여 웹 애플리케이션에서 시스템의 손실 (데이터 등의 손실), 손상의 원인을 줄 수 있는 보안상으로의 약점으로 말합니다.

→ 이러한 취약점을 발견한 해커는 집요하게 공격 한다.

취약점 공격 유형

취약점 공격 유형은 여러가지 종류가 있지만 취약점 공격 유형 (Reference) XSS (Cross Site Scripting)에 대해서 알아보고 해결했던 과정을 정리 하고자 합니다.

XSS 공격이란

아래는 XSS 공격을 테스트 해볼 수 있는 사이트 입니다.
http://testphp.vulnweb.com/

아래의 search art 칸이 게시판의 글 작성 혹은 작성된 게시글의 댓글을 작성 할 수 있는 칸이라고 생각하면 좋을 것 같다.

search art 칸에
<SCRIPT>alert("테스트!!!");</SCRIPT> 를 작성하게 되면

일반적인 게시글, 답장이 아닌 script라는 코드가 실행 되는 것을 확인 할 수 있습니다.

→ 해커는 저렇게 귀엽게 script를 활용하지 않습니다.

<SCRIPT>alert(document, cookie);</SCRIPT> 와 같이 사용자의 쿠키를 탈취 할 수도 있습니다.

이러한 xss 공격을 막아야 하는 이유로는

사용자가 아래와 같은 링크를 클릭하게 되면 페이지가 이동하게 되며

4월 통신요금 도착
아래의 링크를 클릭하여 4월 통신요금을 확인하세요
bit.qw/bill -- url 링크

최악으로는 악성 파일을 다운 받게 되거나, 사용자의 Session 정보 혹은 Cookie 정보가 탈취 되게 됩니다.

xss 공격을 막기 위해서는

XSS 공격을 막기 위해서는 게시판 글 작성, 작성된 게시글에 댓글을 작성 할 수 있는 기능에 대해서

게시글을 작성할 수 있는 input에 아래와 같이 작성하는 것을 막아야한다.
Ex : javascript

<SCRIPT>alert(document, cookie);</SCRIPT>

Ex : html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello</title>
</head>
<body>
    <p>Hello</p>
</body>
</html>

script 언어 혹은 html 을 작성하지 못하게 막아야 합니다.

→ 아래의 코드를 작성하여 xss 공격을 예방 할 수 있습니다.

String cntn = ""; // 프론트 단에서 받아온 input 값 

// <script>, <Script>, <sCript> 등의 입력을 막기 위한 정규식
cntn = cntn.replaceAll("(?i)<[sS][cC][rR][iI][pP][tT][\\/]?>", "");

// 이러한 if문을 쭉 작성하여 위에 작성한 html 코드를 replace 해줘야 하며, 
// "<" ">" 등 의 대한 아스키 코드의 참조 문자를 찾아보면서 해야 된다.
if (cntn.equals("<") {
	cntn.replace("&lt";);
}

번외

코드를 작성하며 테스트 해본 결과로는
xss 공격은 데이터베이스에 script 언어 혹은 html로 저장이 되어야 xss 공격이 되는 것 같다.

-> JPA 를 사용하는 것 만으로도 파라미터 바인딩 방식으로 SQL 쿼리를 실행 하게끔 되어 있어서 XSS 공격에 대응 할 수 있다.

마무리로 이러한 웹 취약점을 검사 할수 있는 Tool (도구) 가 있다고 합니다. 추후 이 부분을 사용하게 된다면 추가적으로 블로깅 할 예정입니다.

0개의 댓글