

SQL Injection 의 공격 원리
SQL Injection의 핵심은 사용자의 입력값이 검증 없이 SQL 쿼리문과 조합되서 실행되는 것
SQL Injection 예시
MX-GRID, i-MATRIX에서 수식으로 조합 (SQL 검증 없이 단순 조합 됨)
MATRIX VBA에서 SQL을 조합
SQL Injection 위협 & 그냥 보안 위배 (vba를 사용자가 접근할 수 있음.)
※ VBA에서 SQL을 만든다는 것은 데이터 소스에서 그냥 SQL 조합 함이 예상됨.


VN_파라미터는 숫자값외에는 사용 절대 금지
VS_파라미터는 SQL 문자리터럴 ‘문자열값’ 형태로 자동 변경 되므로 문제가 되지 않음
VN_파라미터는 하위 호환성으로 인해 해당 값의 타입을 점검하지 않고 쿼리 조합이 발생함.
쿼리 조합이 필요한 경우는 Dynamic SQL 활용
조건에 따른 쿼리 조합, 또는 파라미터 값의 유효성을 검사 가능
자주 쓰는 함수는 사전에 정의하여 재활용이 가능함.
인증 정보를 기반으로 하는 모든 작업은 세션 변수를 사용한다.
Client(PC)에서 전송되는 데이터는 공격자에 의해서 변경될 수 있다.
네트워크 데이터 변조 및 브라우저의 개발자 기능으로 조작이 가능하다.
SSL 적용 또는 통신 구간 암호화 옵션 적용
네트워크로 전송되는 데이터에 대한 암호화 적용하여 데이터 조작 방지
※ 브라우져의 개발자 도구 등을 활용하여 데이터 조작이 가능하므로 근본적인 해결책은 아님
통신구간 암호화 설정
: https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=78708798
AUD 플랫폼에서 기본 제공하는 세션 변수
세션에 저장된 사용자 인증 관련 정보 목록
https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=108396697
| 이름(고정) | i-AUD Server Script / Dynamic SQL 사용 서식 | SQL 사용 서식 | i-AUD JScript 사용시 | 세션 변수 값(예시) | 설명 |
| IP_ADDR | session.getAttribute("IP_ADDR") <%=IP_ADDR$%> | :VS_IP_ADDR$ | Matrix.GetUserInfo().IPAddress | 192.168.xxx.xxx | 접속 아이피 |
| USER_CODE | session.getAttribute("USER_CODE") <%=USER_CODE$%> | :VS_USER_CODE$ | Matrix.GetUserInfo().UserCode | matrix | 사용자 코드 |
| USER_NAME | session.getAttribute("USER_NAME") <%=USER_NAME$%> | :VS_USER_NAME$ | Matrix.GetUserInfo().UserName | 매트릭스 | 사용자명 |
| ORG_CODE | session.getAttribute("ORG_CODE") <%=ORG_CODE$%> | :VS_ORG_CODE$ | Matrix.GetUserInfo().DeptCode | B060000 | 사용자 부서 코드 |
| ORG_NAME | session.getAttribute("ORG_NAME") <%=ORG_NAME$%> | :VS_ORG_NAME$ | - | 전사 | 사용자 부서명 |
| DeptCode | session.getAttribute("DeptCode") <%=DeptCode$%> | :VS_DeptCode$ | Matrix.GetUserInfo().DeptPath | 'B060000',DEFAULT,-1 | 사용자 부서 경로 정보 |
| USER_DEPT_PATH | session.getAttribute("USER_DEPT_PATH") <%=USER_DEPT_PATH$%> | :VS_USER_DEPT_PATH$ | - | |B060000|DEFAULT|-1 | 사용자 부서 경로 정보 |
| USER_ROLE | session.getAttribute("USER_ROLE") <%=USER_ROLE$%> | :VS_USER_ROLE$ | Matrix.GetUserInfo().UserRole | SU;3;V0;SV;ST;M0;1; | 사용자 권한 그룹 |
| LANG_CODE | session.getAttribute("LANG_CODE") <%=DeptCode$%> | :VS_LANG_CODE$ | Matrix.GetUserInfo().LangCode | ko | 다국어 언어 코드 (Admin 내 PORTAL 설정에서 선택한 다국어 코드 값) |
| LANG_IDX | session.getAttribute("LANG_IDX") <%=DeptCode$%> | :VS_LANG_IDX$ | - | 1 | 다국어 언어 컬럼 인덱스 (MTX_LANG 테이블 > LANG_NAME_COLUMN 데이터의 'COMMENTS' 뒤에 붙은 숫자값) |
SQL Injection 공격 회피 방법 (Dynamic SQL)
