본문 바로가기
공부/KISA

XPath 삽입 - KISA 소프트웨어 개발 보안 가이드

by Skogkatt의 개인 블로그 2020. 7. 20.
반응형

https://www.kisa.or.kr/public/laws/laws3.jsp

 

기술안내서 가이드 < 관련법령·기술안내서 < 자료실 : 한국인터넷진흥원

기술안내서 가이드 한국인터넷진흥원 기술안내서 가이드 입니다. 게시판 목록 보기 기술안내서 가이드 표 대분류 소분류 기술안내서 가이드 대상 수준 인터넷 진흥 및 이용 활성화 인터넷 진흥

www.kisa.or.kr


구현 단계 시큐어코딩 가이드 - 입력 데이터 검증 및 표현 - XPath 삽입 

가. 개요

  • 외부 입력값을 적절한 검사과정 없이 XPath 쿼리문 생성을 위한 문자열로 사용하면, 공격자는 프로 그래머가 의도하지 않았던 문자열을 전달하여 쿼리 문의 의미를 왜곡시키거나 그 구조를 변경하고 임의의 쿼리를 실행하여 인가되지 않은 데이터를 열람할 수 있다.

나. 보안대책

  • XPath 쿼리에 사용되는 외부 입력데이터에 대하여 특수문자(", [, ], /, =, @ 등) 및 쿼리 예약어 필터링을 수행하고 파라미터화 된 쿼리문을 지원하는 XQuery를 사용한다.

다. 코드예제

JAVA
더보기

아래 예제에서는 nm과 pw에 대한 입력값 검증을 수행하지 않으므로 nm의 값으로 "tester", pw의 값으로 "x' or 'x'='x"을 전달하면 아래와 같은 질의문이 생성되어 인증과정을 거치지 않고 로그인할 수 있다.

"//users/user[login/text()='tester' and password/text()='x' or //'x'='x']/home_dir/text()"

다음의 예제는 XQuery를 사용하여 미리 쿼리 골격을 생성함으로써 외부 입력으로 인해 쿼리 구조가 바뀌는 것을 막을 수 있다.

파라미터화 된 쿼리를 지원하는 XQuery 구문으로 대체할 수 없는 경우에는 XPath 삽입을 유발할 수 있는 문자들을 입력값에서 제거하고 XPath 구문을 생성, 실행하도록 한다.

아래 코드는 입력값을 검증하지 않고 입력값을 XPath 구문 생성 및 실행에 사용하고 있다. 입력 값으로 any' or 'a' = 'a 와 같이 XPath 구문을 조작하는 문자열을 전달하는 경우 //food[name ='any' or 'a' = 'a']/price 같이 구문이 만들어지고 실행되어 모든 food의 가격(price)이 조회되게 된다.

외부 입력값을 XPath 구문 생성 및 실행에 사용하는 경우 XPath 구문을 조작할 수 있는 문자열을 제거하고 사용할 수 있도록 한다.

 

C#
더보기

다음의 예제는 외부 입력을 사용하여 XPath 식에 바로 사용합니다. 이는 공격자의 입력에 따라 XQuery의 구조를 바꾸어 예기치 않은 공격이 발생할 수 있다.

다음의 예제는 XPathExpression을 사용하여 미리 쿼리 골격을 생성함으로써 외부 입력으로 인해 쿼리 구조가 바뀌는 것을 막을 수 있다.


참고자료

반응형

댓글