min

XSS , CSRF에 대하여 ... 본문

리엑트/컴퓨터 과학

XSS , CSRF에 대하여 ...

minprogramming 2023. 6. 30. 00:53

1. XSS

XSS는 (Cross-Site-Scripting)이라는 글자의 약자로 클라이언트 사이드 공격이다. 이때 이말을 듣고 클라이언트 사이드 공격이 무엇인지 궁금해하시는 분들이 있을 것이다. 클라이언트 사이드 공격은 웹 페이지에 이용자를 대상으로 공격하는 기법을 의미한다. 즉 XSS는 사용자 정보(쿠키, 세션, 토큰), 클라이언트 입장에서의 의도치 않은 공격 등이 있다. 그렇다면 실제 예시로는 어떤 것이 있을까?

1-1) stored / persistent

이름을 보면 정말 복잡해 보이지만 사실은 엄청 간단하다. 예를 들어 input 창이 있다고 가정하자! 이때 input창에서 데이터를 입력하면 입력한 데이터가 폼을 통해서 서버로 이동할 것이고 리소스에 저장될 것이다. 근데 여기서 만약 input 내용으로 스크립트 태그를 넣으면 어떻게 될까? 이런 형식이 될 것이다.

<p class="content"><script>alert(1);</script></p>

즉 script 태그가 문자열로 들어가는 것이 아니라 실행 코드로 들어간다. 그래서 해당 코드가 실행이 되고 그로 인해서 클라이언트에게 악영향을 미칠 수 있다. 

1-2) reflected/non-persistent

이것도 이름을 보면 정말 복잡해 보인다. 하지만 실제로는 엄청 간단 하다. 이는 script 태그를 그냥 url에 붙이는 것이다. 즉 예를 들어서 form 태그에 e.preventDefault()를 넣지 않고 바로 서버로 넘기는 경우에는 input의 내용에서의 <script> 태그가 들어갈 것이다. 그리고 이로 인해서 <script> 태그가 동작을 하고 위의 설명 처럼 클라이언트의 내용을 탈취 할 수 있다.

1-3) 막는 방법

이를 막는 방법은 여러가지가 있지만 우리가 현실적으로 할 수 있는 방안들에 대해서 소개하겠다.

첫번째는 문자열로 치환하는 것이다. 즉 스크립트 구문을 문자열로 치환해서 작동을 막는 것이다.

두번째는 필터링을 거는 것이다. 예를 들어 "<script>"라는 키워드가 나오면 실행되지 못하도록 하는 것이다.

2. CSRF

CSRF는 Cross-Site Request Forgery의 약자로 "사용자의 동의 없이, 사용자도 모르게" 브라우저에게 요청을 하여 서버로 부터 데이터를 가져오는 작업이다. 이는 쉽게 말해서 내가 어떤 버튼을 눌렀고 내 쿠키가 유효성이 있다면 다른 해킹 사이트로 들어가서 이 사이트에서는 브라우저에게 작업을 걸어서 서버로 부터 원하는 정보를 탈취하는 방식이다. 즉 CSRF는 피싱사이트등에서 많이 사용된다.

막는 방법

이를 막는 방법은 크게 2가지가 있는데 이들의 성격이 비슷해서 두 방법에 공통점에 대해서 설명하겠다. 이 두 방법의 공통점은 서버와 클라이언트가 대칭키 방식으로 인증을 하는 것이다.

'리엑트 > 컴퓨터 과학' 카테고리의 다른 글

전역상태관리에 대하여...  (0) 2023.08.17
상태 관리에 대하여...  (0) 2023.08.14
state에 대하여...  (0) 2023.06.26
CSR vs SSR에 대하여...  (0) 2023.06.23
MVVM과 FLUX에 대하여...  (0) 2023.06.20