반응형
https://www.kisa.or.kr/public/laws/laws3.jsp
기술안내서 가이드 < 관련법령·기술안내서 < 자료실 : 한국인터넷진흥원
기술안내서 가이드 한국인터넷진흥원 기술안내서 가이드 입니다. 게시판 목록 보기 기술안내서 가이드 표 대분류 소분류 기술안내서 가이드 대상 수준 인터넷 진흥 및 이용 활성화 인터넷 진흥
www.kisa.or.kr
구현 단계 시큐어코딩 가이드 - 입력 데이터 검증 및 표현 - XQuery 삽입
가. 개요
- XQuery를 사용하여 XML 데이터에 대한 동적 쿼리를 생성 시 사용되는 외부 입력값에 대해 적절한 검증절차가 존재하지 않으면 공격자가 쿼리 문의 구조를 임의로 변경할 수 있게 된다. 이로 인해 허가되지 않은 데이터를 조회하거나 인증절차를 우회할 수 있다.
나. 보안대책
- XQuery에 사용되는 외부 입력데이터에 대하여 특수문자 및 쿼리 예약어를 필터링하고, XQuery를 사용한 쿼리문은 문자열을 연결하는 형태로 구성하지 않고 파라미터(Parameter)화된 쿼리문을 사용한다.
다. 코드 예제
JAVA
더보기
![](https://blog.kakaocdn.net/dn/bnHWpf/btqFOWX4Q7T/Sayd15ysqRmU2jF5hmlzUk/img.png)
![](https://blog.kakaocdn.net/dn/ywKeG/btqFOL3vJEx/NtGaIPQ0dSmMaC5rSUZo31/img.png)
다음의 예제에서는 executeQuery를 통해 생성하는 쿼리의 파라미터의 일부로 외부 입력값 (name)을 사용하고 있다. 만일 something' or '1'='1 을 name의 값으로 전달하면 다음과 같은 쿼리문을 수행할 수 있으며, 이를 통해 파일 내의 모든 값을 출력할 수 있게 된다.
doc('users.xml')/userlist/user[uname='something' or '1‘='1’]
![](https://blog.kakaocdn.net/dn/bnHWpf/btqFOWX4Q7T/Sayd15ysqRmU2jF5hmlzUk/img.png)
다음의 예제에서는 외부 입력값을 받고 해당 값 기반의 XQuery상의 쿼리 구조를 변경시키지 않는 bindString 함수를 이용함으로써 외부 입력값을 통해 쿼리 구조가 변경될 수 없도록 한다.
![](https://blog.kakaocdn.net/dn/ywKeG/btqFOL3vJEx/NtGaIPQ0dSmMaC5rSUZo31/img.png)
C#
더보기
![](https://blog.kakaocdn.net/dn/cvGBo4/btqFOX3Iuu4/uSbrvXcadqTDaGufWalcM0/img.png)
![](https://blog.kakaocdn.net/dn/bkNIWx/btqFPGAq99t/NzhEEfRnaM2zsKg30rGBr1/img.png)
![](https://blog.kakaocdn.net/dn/bP7aHV/btqFOMnPAJD/4qceNYQfPNZjDPJTGnebKk/img.png)
![](https://blog.kakaocdn.net/dn/bZcIyn/btqFNq0v10Z/f5OYkur7RaEh0uWc4EOjqk/img.png)
다음의 C# 코드도 외부 입력 값을 이용하여 XQuery 문을 만들고 있다.
![](https://blog.kakaocdn.net/dn/cvGBo4/btqFOX3Iuu4/uSbrvXcadqTDaGufWalcM0/img.png)
![](https://blog.kakaocdn.net/dn/bkNIWx/btqFPGAq99t/NzhEEfRnaM2zsKg30rGBr1/img.png)
문자열 필터링을 통해 쿼리 문 조작을 막을 수 있다.
![](https://blog.kakaocdn.net/dn/bP7aHV/btqFOMnPAJD/4qceNYQfPNZjDPJTGnebKk/img.png)
![](https://blog.kakaocdn.net/dn/bZcIyn/btqFNq0v10Z/f5OYkur7RaEh0uWc4EOjqk/img.png)
참고자료
- CWE-652 XQuery Injection, MITRE,
http://cwe.mitre.org/data/definitions/652.html - Prevent XML Injection, CERT,
http://www.securecoding.cert.org/confluence/display/java/IDS16- J.+Prevent+XML+Injection
반응형
'공부 > KISA' 카테고리의 다른 글
LDAP 삽입 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.20 |
---|---|
XPath 삽입 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.20 |
신뢰되지 않는 URL 주소로 자동접속 연결 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.20 |
위험한 형식 파일 업로드 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.19 |
운영체제 명령어 삽입 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.18 |
댓글