본문 바로가기
개발

[보안] xss 게시판 취약점 보안

by 똘또히 2016. 10. 18.


  XSS 취약점 보완 방법

 

   Reflected XSSStored XSSCSRF 모두 입력 값에 대한 검증(Filtering)이 제대로 되지 않아 나타나는 취약점이다.

   사용자가 스크립트를 전혀 입력할 필요가 없는 경우 <script>,<iframe>,<embed> 등의 태그를 원천적으로 제거해 주는 것이 좋으며,

   HTML 허용 게시판 처럼 일부 태그를 허용해야 한다면 White List나 Black List 기반의 필터링 방법을 적용한다

   ( 블랙리스트 기반의 필터링 방법은 우회 방법이 많기 때문에 새로운 우회공격에 대한 지속적인 모니터 & 업데이트의 필요성이 있다 ) 

 

 

  1. Application 에서 HTML 비허용 시 ( 입력한 파라메터 값을 서버에서 처리하기 때문에 서버에서 수정해야 함 )

        >> HTML을 사용할 필요가 없으므로 HTML 태그 자체를 사용할 수 없게 만들면 된다. [ PHP ]

 

strip_tags($content) : HTML 태그 삭제

if($name=GET['name'])

$name=strip_tags($name);

echo $name

파라메터 값을 출력하기 전 strip_tags() 함수를 사용하여 넘어온 값에 HTML 태그가 포함될 경우 HTML 태그 자체를 삭제

 

htmlspecialchars($content) : 강제 URL Encoding

if($name=$_GET['name'])

$name=htmlspecialchars($name);

echo $name;

HTML 태그에 사용되는 <, >, &, " 등의 특수 문자를 강제로 URL Encoding(&lt;, &gt; &amp;, &quot;)시킴

 

$content=str_replace("<", "&lt", $content) : 발견된 문자를 지정한 문자로 치환

if($name=$_GET['name'])

$name=str_replace("<", "lt;", $name);

$name=str_replace(">", "gt;", $name);

echo $name;

발견된 문자("<", ">")를 지정한 문자로 강제 치환해 주어 스크립트가 실행되지 않도록 한다. ( * eregi_replace() )

 

 

 2. Application 에서 HTML 허용 시 ( HTML 허용 게시판일 경우 선택적 필터링 )

 

특정 태그 사용 방지 [ PHP ]

str_replace("script", "scr<!-- -->ipt", $content);

str_replace("iframe", "ifr<!-- -->ame", $content);

str_replace("embed", "em<!-- -->bed", $content);

eregi_replace()나 str_replace() 함수를 사용하여 태그에 사용될 문자열 사이에 주석을 삽입하는 등의 대응이 가능

 

 

 ※ ASP와 JSP에서의 방어 코드

 

Language

Prevention Source Code

PHP

$content = str_replace("<", "&lt;", $content);

ASP

content = replace(content, "&lt;", "<")

JSP

content = content_replaceAll("&lt;", "<");