홈페이지 취약점 분석 이야기 파일 지도 사진 깨알






>> 목록보이기
#조치방안 #방어법 #XSS 방어 #크로스사이트스크립트 #SQL구문삽입 #입력검증 #특수문자 제거

XSS(Cross-site Script)와 SQL 인젝션 방어법

입력값에서 다음과 같은 특수문자 제거하기!!!
< > ( ) ' " ; = + | & - # ..

JSP에서 특수문자 제거하기

<%
	String user_name = request.getParameter("name");
	user_name = replace(user_name, "<", " ");
	user_name = replace(user_name, ">", " ");
	user_name = replace(user_name, "(", " ");
	user_name = replace(user_name, ")", " ");
	user_name = replace(user_name, "'", " ");
	user_name = replace(user_name, "\"", " ");
	user_name = replace(user_name, ";", " ");
	user_name = replace(user_name, "=", " ");
	user_name = replace(user_name, "+", " ");
	user_name = replace(user_name, "|", " ");
	user_name = replace(user_name, "&", " ");
	user_name = replace(user_name, "-", " ");
	user_name = replace(user_name, "#", " ");
	user_name = replace(user_name, "..", " ");
%>

PHP에서 특수문자 제거하기

<?PHP
	$user_name = $_POST['name'];
	$spc = array('<', '>', '(', ')', '\'', '"', ';', '=', '+', '|', '&', '-', '#', '..');
	$user_name = str_replace($spc, ' ', $user_name);
?>

두 소스코드는 하나의 입력변수에 대해서 JSP와 PHP에서 다수의 특수문자를 공백( )으로 치환하는 것이다. 위와 같은 개념으로 함수를 만들어서 모든 변수에 적용시키면 XSS공격, SQL구문삽입 공격 등을 대부분 차단할 수 있다. 공백문자로 치환할 특수문자 목록에 연이은 마침표(..)가 들어있으므로 경로조작 취약점도 대부분 방어할 수 있다.

특수문자 제거 시험 (편의를 위해 공백대신 '_'로 변경하여 출력)
문자열 입력:

[주의사항]

  • 개발자들이 많이 간과하는 부분이 "파일이름"이다. 파일이름도 사용자가 조작할 수 있는 입력값이므로 특수문자를 제거해야 한다.
  • 마침표 두 개('..')도 공백으로 처리하면 다수의 파일다운로드/경로조작 취약점을 방어할 수 있다. 완전하게 경로조작 취약점을 막기 위해서는 사선(/), 역사선(\) 문자도 치환하거나 제거해야 한다. 또는 다른 파일다운로드 방어법을 참조...

[처음 작성한 날: 2016.11.09]    [마지막으로 고친 날: 2016.11.14] 


< 이전 글 : 파일다운로드/경로조작 방어하기 (2016.11.09)

> 다음 글 : 길찾기(sitemap) (2016.11.09)


크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문