웹 취약점 중 한가지인 SQL 인젝션은 LDAP인젝션과 비슷한 개념으로, 사용자가 입력하는 내용에 SQL과 관련된 문법을 넣어서 해당 문법이 where 조건절에 실행되어 정보를 조작하거나 탈취하는 취약점 입니다.
"LDAP 인젝션은 특수문자에 대한 쿼리문 실행" 에 대해서 강조한다면,
"SQL인젝션이 조건절에 대한 쿼리문 실행" 에 좀 더 집중을 두고 있습니다.
* 거의 비슷한 내용 입니다.
해당 취약점 공격은, 사용자 입력필드에서 쿼리 조건문을 삽입하여서 정보의 위변조가 쉽게 이루어 질 수 있습니다.
가령, 로그인이 필요한 기능에서 사용자의 비밀번호 입력을 하는 부분에 "or (1=1)"이라는 값을 대입하여 실행이 가능하다면, 암호값 일치여부와 상관 없이 로그인을 할 수 있기 때문 입니다.
#방법1
이를 해결하기 위해서는 특수기호에 대한 정규식을 조사하여 제거하는 기능이 필요합니다.
아래 메소드는 특수문자를 전부 제거하는 간단한 기능 입니다.
//한글, 영문, 숫자 이외의 모든 특수문자를 치환 합니다.
public static String StringReplace(String str){
String match = "[^\uAC00-\uD7A30-9a-zA-Z]";
str = str.replaceAll(match, " ");
return str;
}
이러한 메소드를 필터(Filter)나 Aop기능에 붙여서 불필요한 문자가 대입되는 것을 방지 하여야 합니다.
#방법2
프레임워크의 기술 기반이라면 좀 더 쉽게 조치할 수 있습니다.
Srping에서 mybatis를 사용 한 다면, 샵(#{}) 형식을 사용하지 않고 달러(${}) 형식을 사용하면 간단하게 조치가 가능 합니다(문자열로 받기 때문에).
또한 JPA 방식의 기술을 사용하면(예: Hibernate) 대입되는 값 또한 문자열로 인식하므로 간단하게 조치가 가능 합니다.
이상으로 웹 취약점 중 한가지인 SQL 인젝션 대비 방법에 대해서 살펴보았습니다.
LDAP 인젝션과 매우 비슷하여 내용이 비슷한점 양해 부탁드립니다. :-)
궁금한점 또는 틀린 부분은 언제든 연락주세요! 👻
'웹 취약점(Web vulnerability)' 카테고리의 다른 글
7. Xpath 인젝션(XML Path Language) (0) | 2021.11.29 |
---|---|
6. SSI 인젝션(Server Side Include) (0) | 2021.11.29 |
4. 운영체제 명령실행(OS Command Execution) (0) | 2021.11.29 |
3. LDAP 인젝션(Lightweight Directory Access Protocol) (2) | 2021.11.29 |
2. 포멧 스트링(Format String) (0) | 2021.11.29 |
댓글