개발

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

똘또히 2016. 10. 18. 14:28


  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;", "<");