XSS(Cross-Site Scripting)

XSS는 해커가 웹 사이트에 악성 스크립트를 삽입해 사용자를 공격하는 취약점이다. 입력받은 값을 검사하지 않았을 때 발생하며, 이 취약점으로 인해 악성 홈페이지 접속하게 한다던지 또는 세션이나 쿠키를 탈취할 수 있다.

 

 

시큐어 코딩이 안된 웹사이트에 위와 같이 글을 작성해보았다. 스크립트를 이용해 공격자 사이트로 쿠키값을 넘겨주는 코드이다. 

 

이미지 사이즈 크기를 0으로 해 놓았기 때문에 사용자는 자신이 공격당한 것을 알아채지 못한다.

 

공격자 서버

이 취약점은 웹 사이트에서 입력값을 검증하지 않아서 발생했기 때문에 PHP 내장 함수인 htmlspecialchars를 사용하면 XSS 공격에 방어할 수 있다. htmlspecialchars 함수는 ' " < > &  문자들을 HTML 엔티티 문자로 변환하기 때문에 스크립트를 사용할 수 없다.

 

htmlspecialchars 함수 적용

 

CSRF(Cross-Site Request Forgery)

XSS와 마찬가지로 입력값이 검증되지 않으면 스크립트 구문으로 공격이 가능하지만 XSS는 공격 대상이 클라이언트인 반면, CSRF는 서버로 대상으로 공격한다. CSRF는 등록, 수정, 삭제 등의 행위를 사용자의 의지와는 무관하게 공격하게끔 할 수 있다. XSS와 다르게 해당 웹 사이트를 공격하기 위해서 요청, 응답 메세지 분석이 필요하는 귀찮은 점도 있다.

 

게시글 생성 코드

위 코드를 작성하면 누군가가 저 글을 볼때마다 관리자의 이름으로 글이 계속 생성된다. 생성뿐만아니라 코드 작성에 따라 삭제도 가능하며, 권한이 있는 사이트면 관리자급 권한 상승을 하여 개인정보도 탈취할 수 있다.

 

대응법은 XSS처럼 기본적으로 함수를 사용해 특수문자를 막는 방법도 있지만, Referrer 검증 또는 토큰을 사용하는 방법이 있다.

'공부 > ' 카테고리의 다른 글

쿠키(Cookie)와 세션(Session)  (0) 2020.06.11

+ Recent posts