-->

[JSP] <jsp:include>와 <jsp:param>

 

웹사이트 구축 열심히 하고 있다.. jsp에는 <jsp:include> 액션 태그를 이용해서 특정 jsp를 import 시킬 수 있다.

html 레이아웃의 Left 영역에 해당하는 부분의 소스를 추가할 수도 있고, 각종 <script> 들을 넣은 리소스 파일을 추가할 수도 있다.

이는 모듈화를 꾀할 수 있는 좋은 방법이 된다.

 

해당 include 된 jsp는 request 객체를 공유한다.

<jsp:include page="../test.jsp" flush="true" />

flush 속성은 포함 대상 JSP 페이지에 제어를 넘기기 직전에 출력 버퍼를 클라이언트로 출력하는 flush를 수행할지 여부(true, false)를 지정한다. 기본값은 false이며, flush 하지 않는다고 한다.

 

여기에 <jsp:param> 태그를 이용해서 공유된 request 객체 안에 parameter를 넣을 수가 있다.

<jsp:include page="../test.jsp" flush="true">
	<jsp:param name="myParam" value="test" />
</jsp:include>

단, <jsp:param>은 String타입의 값만 전달할 수 있기 때문에 형변환이 필요로 하면, request.setAttribute를 이용해야 한다.

그럼 include 된 test.jsp 안에서 스크립틀릿을 이용해 parameter 정보를 가져올 수 있다.

<%
	String strParam = (String)request.getParameter("myParam");
%>

...

<body>
	<div>
		param : <%=strParam%>
	</div>
</body>

 

그러나.. 이렇게 request 객체에서 받아온 정보를 바로 뿌려주는 것은 XSS 보안 이슈를 야기시킨다. 

해커가 request 안의 parameter정보를 '<script>alert('test')</script>' 라고 세팅해서 보내버리면 스크립트가 실행이 되어버리는 것이다. 

따라서 이를 해결하기 위한 방법으로는

1. 파라미터 정보를 일일히 replaceAll 하는 방법

<%!
	public String requestReplace (String paramValue, String gubun) {
        String result = "";
        
        if (paramValue != null) {
        	
        	paramValue = paramValue.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

        	paramValue = paramValue.replaceAll("\\*", "");
        	paramValue = paramValue.replaceAll("\\?", "");
        	paramValue = paramValue.replaceAll("\\[", "");
        	paramValue = paramValue.replaceAll("\\{", "");
        	paramValue = paramValue.replaceAll("\\(", "");
        	paramValue = paramValue.replaceAll("\\)", "");
        	paramValue = paramValue.replaceAll("\\^", "");
        	paramValue = paramValue.replaceAll("\\$", "");
        	paramValue = paramValue.replaceAll("'", "");
        	paramValue = paramValue.replaceAll("@", "");
        	paramValue = paramValue.replaceAll("%", "");
        	paramValue = paramValue.replaceAll(";", "");
        	paramValue = paramValue.replaceAll(":", "");
        	paramValue = paramValue.replaceAll("-", "");
        	paramValue = paramValue.replaceAll("#", "");
        	paramValue = paramValue.replaceAll("--", "");
        	paramValue = paramValue.replaceAll("-", "");
        	paramValue = paramValue.replaceAll(",", "");
        	
        	if(gubun != "encodeData"){
        		paramValue = paramValue.replaceAll("\\+", "");
        		paramValue = paramValue.replaceAll("/", "");
            paramValue = paramValue.replaceAll("=", "");
        	}        	
        	result = paramValue;
            
        }
        return result;
  }
%>

 

2. web.xml에 filter-chain을 이용하는 방법

이건 라이브러리도 다양하다.

 

3. 간단하게 JSTL의 <c:out> 태그를 이용하는 방법

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
	String Param = (String)request.getParameter("myParam");
	pageContext.setAttribute("strParam", Param);
%>

...

	<div>
    		param : '<c:out value="${pageScope.strParam}"/>'
	</div>
...

나는 이 방법을 택했는데 jstl의 <c:out> 태그는 첫 번째 방법인 replaceAll과 비슷하게 기본적으로 excapeXML이라는 속성이 true로 설정되어 있다.

<jsp:param> 은 request 객체를 공유한다고 했으니 이를 받아오기 위해 PageScope 단위의 변수를 만들어주고 html내부에서는 EL태그로 가져오면 되는 것이다.

 

 

JSP를 요새 중점적으로 다루면서 많은 것을 공부하고 있다. 

그러면서 javascript가 얼마나 강력한 언어인지 다시 한번 알게 된다.

그렇지만 유저가 편해질수록 보안은 강해져야 한다.

 

 

 


<출처>

https://dololak.tistory.com/493

 

[서블릿/JSP] 액션 태그 사용법. 으로 데이터 넘기기. 데이터 공유하기

이전글 [서블릿/JSP] 액션 태그 동작 방식 및 JSP 모듈화 개념 액션 태그 사용법 액션 태그를 사용하면 현재 JSP 페이지에 대상 JSP 페이지의 처리 결과를 포함시킬 수 있습

dololak.tistory.com

http://www.devkuma.com/books/pages/1154

 

프로그램 개발 지식 공유, devkuma

데브쿠마는 프로그래밍 개발에 대한 지식을 공유합니다.

www.devkuma.com

https://lee-mandu.tistory.com/450?category=633568 

 

(공통처리)웹취약성 크로스사이트 스크립트(XSS) 처리하기2_filter chain

안녕하세요. 앞서 크로스사이트 스크립트(XSS)를 처리하기 위하여 포스팅한적이 있습니다. 이는 간단한 경우에 임시로 처리하기 위함이었습니다. [개발/web, html5,jsp] - 웹취약성 크로스사이트 스

lee-mandu.tistory.com

 

+ Recent posts