Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- php
- 제이쿼리
- Oracle
- Stock
- 공모주 청약
- 공모주
- SQL
- 자바스크립트
- html
- Eclipse
- Stock ipo
- java
- codeigniter
- 맥
- 오라클
- 공모주 청약 일정
- IPO
- 6월 공모주 청약 일정
- css
- 주식 청약
- linux
- 코드이그나이터
- 주식
- 자바
- MYSQL
- JavaScript
- jquery
- 주식 청약 일정
- 7월 공모주 청약 일정
- 리눅스
Archives
- Today
- Total
개발자의 끄적끄적
[java] 전자정부프레임워크 크로스 사이트 스크립팅(XSS)과 HTMLTagFilter [펌] 본문
728x90
반응형
[java] 전자정부프레임워크 크로스 사이트 스크립팅(XSS)과 HTMLTagFilter [펌]
크로스 사이트 스크립팅(XSS)
Cross Site Scripting
- 스크립트를 악용해 사용자를 공격하는 기법.
- SQL Injection과 더불어 가장 자주 사용되는 해킹기법이다.
- 파라미터에 를 입력하여 다른 사용자에게 피해를 주게 한다.
HTMLTagFilter
전자정부프레임워크에서 제공하는 HTMLTagFilter 클래스를 구현하여 보다 간편하게 XSS 공격을 방어할 수 있다.
web.xml 에 다음을 추가하면 된다.
<filter>
<filter-name>HTMLTagFilter</filter-name>
<filter-class>egovframework.com.cmm.filter.HTMLTagFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HTMLTagFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
egovframework.com.cmm.filter.HTMLTagFilter
이 부분은 HTMLTagFilter 클래스가 있는 패키지 주소를 입력한다.
Filter는 기본적으로 <url-pattern>을 통해 Filter의 적용 범위를 결정한다.
위의 예시는 .do 로 끝나는 모든 url을 필터링하게 되어있다.
Filter는 예외(Exclude)를 지정하는 곳이 따로 없기 때문에 메서드를 따로 구현해야 한다.
참고 : Filter는 전체적인 url을 처리하기 때문에 예외가 없다고 한다.
(Interceptor는 특청 url 요청을 처리하기 위해 사용)
먼저 전자정부프레임워크에서 제공하는 HTMLTagFilter.java 클래스이다.
HTMLTagFilter.java
HTMLTagFilter.java
/*
* Copyright 2008-2009 MOPAS(MINISTRY OF SECURITY AND PUBLIC ADMINISTRATION).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package egovframework.com.cmm.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class HTMLTagFilter implements Filter{
@SuppressWarnings("unused")
private FilterConfig config;
//2. 실제 Filter 작업을 실행하는 구간
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response);
}
//1. Filter 인스턴스 시작
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
//3. Filter 인스턴스 종료
public void destroy() {
}
}
다른 블로그를 참고하여 /biz/로 시작하는 url은 filter 작업을 거치지 않도록 분기 처리를 위한 checkUrl 매서드를 만들고 doFilter 매서드를 수정하였다.
package egovframework.com.cmm.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class HTMLTagFilter implements Filter{
@SuppressWarnings("unused")
private FilterConfig config;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
if(checkUrl(req)){
// /biz/로 시작하는 url은 filter를 하지 않는다.
chain.doFilter(request, response);
}
else {
//그 외의 경우 filter를 한다.
chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response);
}
}
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
public void destroy() {
}
// "/biz/"로 시작하는 url인지 확인하는 method
private boolean checkUrl(HttpServletRequest req) {
String uri = req.getRequestURI().toString().trim();
if(uri.startsWith("/biz/")){
return true;
}
else {
return false;
}
}
}
참고 및 출처 : https://jwchoi85.tistory.com/87
출처 : https://kanghw.tistory.com/15
반응형
'개발 > java & jsp' 카테고리의 다른 글
[Eclipse] Maven Dependency 자동 조회 되지 않을 때 [펌] (0) | 2020.05.23 |
---|---|
[java] xml 생성 예제 (0) | 2020.05.20 |
[Spring] 프로젝트 불러오기, 내보내기 (Import, Export) (0) | 2020.05.15 |
[jstl] html special characters 처리방법 (0) | 2020.05.15 |
[java/spring] 코드에서 스프링 버전 확인하기 ( SpringVersion.getVersion() ) [펌] (0) | 2020.05.13 |
Comments