전자정부 표준프레임워크
iBatis SQL Maps;MyBatis 과 스프링 기반의 java 기반의 정보시스템 구축에 활용하실 수 있는 개발·운영 표준 환경을 제공하기 위한 것입니다.
공공기관의 요구조건을 충족하기 때문에 검수에 대한 부담을 줄일 수 있고, 최근 보안 기능도 많이 적용되어 신뢰할만 합니다.
HTMLTagFilterRequestWrapper.java
3.7.0의 경우 getParameterValues, getParameter 메소드에 대해 XSS 공격 방어가 적용되어 있습니다.
switch (c) {
case '<':
strBuff.append("&lt;");
break;
case '>':
strBuff.append("&gt;");
break;
case '&':
strBuff.append("&amp;");
break;
case '"':
strBuff.append("&quot;");
break;
case '\'':
strBuff.append("&apos;");
break;
default:
strBuff.append(c);
break;
}
HTMLTagFilter.java
doFilter 메소드에 HTMLTagFilterRequestWrapper 클래스를 적용하여, HttpServletRequest에 의한 입력 값 필터링을 수행합니다.
web.xml 에 처리되는 확장자와 필터 클래스가 정의되어 있으니, 해당 파일을 먼저 확인하여 경로를 찾아보면 도움이 됩니다.
<filter>
<filter-name>HTMLTagFilter</filter-name>
<filter-class>egovframework.rte.ptl.mvc.filter.HTMLTagFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HTMLTagFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
iBatis SQL Maps
동적 바인딩이 아닌 정적 바인딩을 사용하여 SQL Injection 에 대한 위협이 낮습니다.
<select id="selectSampleList" parameterType="searchVO" resultType="egovMap">
SELECT
ID, NAME, DESCRIPTION, USE_YN, REG_USER
FROM SAMPLE
WHERE 1=1
<if test="searchKeyword != null and searchKeyword != ''">
<choose>
<when test="searchCondition == 0">
AND ID LIKE '%' || #{searchKeyword} || '%'
</when>
<when test="searchCondition == 1">
AND NAME LIKE '%' || #{searchKeyword} || '%'
</when>
</choose>
</if>
ORDER BY ID ASC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
EgovSampleController.java
lab101-project-create-tutor 의 주요 파일로 데이터 리스팅, 입력, 삭제 관련 매소드를 정의하고 있습니다.
입력 파라미터 중 UseYn은 char(1) 로 선언되어 2자리 이상이되면 오류라 발생합니다.
&나 ‘가 필터 메소드에 의해 변환되더라도 “&”가 붙으므로 이를 제거해 줄 필요가 있습니다.
sampleVO.setUseYn(sampleVO.getUseYn().replaceAll("&", "").substring(0, 1));
Y나 N만 들어가게 하려면 조건문이 하나 더 필요한데, 입력 값이 원하는 것이 아닐 경우 기본 N으로 처리하도록 하는 코드는 아래와 같습니다.
if(sampleVO.getUseYn() != "Y"){
if(sampleVO.getUseYn() != "N"){
sampleVO.setUseYn("N");
}
}
server.xml
기존에 사용하는 프록시도구나 WAS가 있어 8080 포트를 사용 중이라면, 설정 파일에서 포트를 변경하여 사용 가능합니다.
<Connector connectionTimeout="20000" port="8090" protocol="HTTP/1.1" redirectPort="8443"/>