크로스 사이트 스크립트 방어법으로 기초적이고 간단한 방법을 기술합니다.
먼저 크로사이트 스트립트 (XSS) 에 대한 설명입니다.
크로스 사이트 스크립트란
사이트 간 스크립팅(또는 크로스 사이트 스크립팅, 영문 명칭 cross-site scripting, 영문 약어 XSS)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다. 주로 여러 사용자가 보게 되는 전자 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어진다. 이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타난다. 이 취약점으로 해커가 사용자의 정보(쿠키, 세션 등)를 탈취하거나, 자동으로 비정상적인 기능을 수행하게 하거나 할 수 있다. 주로 다른 웹사이트와 정보를 교환하는 식으로 작동하므로 사이트 간 스크립팅이라고 한다.
간단한 문자등을 삽입하여 해킹이 가능하기 때문에 기본적으로 방어를 해주는게 좋습니다.
소개할 방어법은 php 내장함수인 htmlentities 을 사용하여 방어합니다.
기본적인 부분이지만 이렇게만 해줘도 상당부분 방어가 가능합니다.
htmlentities과 비슷한 함수로 htmlspecialchars 도 사용 하는데
두 함수의 차이는 다음과 같습니다.
(htmlspecialchars,htmlentities 두개다 기본 euc-kr을 지원하지 않습니다)
그런데 htmlspecialchars에서는 한글깨짐이 발생하지 않습니다.
<,>,& 외의 다른 문자는 안건드립니다.
tmlentities는 다 건드립니다. 다 이스케이프합니다.
기분 문자셋이 ISO-8859-1이니 영문을 제외하고 전부깨집니다.
적절하게 두개중 알맞게 쓰면 되겠습니다.
<?
$word = $_GET[‘word’];
echo “함수 사용 X : “.$word.”<BR>”;
echo “함수 사용 O : “.htmlentities($word).”<BR>”;
?>
<form action = “xss.html” >
<input type=”text” name = ‘word’ size = “50”>
<input type=”submit”>
</form>
입력전
입력후
함수를 사용하여 결과를 봤을때 사용 하지 않는 결과는 html 태그를 그대로 반영하여
결과를 내뱉습니다.
간단한 함수 적용으로도 기본적인 보안이 가능합니다.