xss 보완 적용관련
- 작성자 :
- 이*규
- 작성일 :
- 2014-06-16 14:44:56
- 조회수 :
- 912
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
xss 적용관련 문의 입니다.
게시판 생성시 예제파일을 보면 <c:out value=${result.nttCn}" escapeXml="false" /> 이렇게 되어 있는데요.
그대로 사용하면 되는건가요? 조금만 자세히 알려주시면 감사드리겠습니다.
현재 제가 사용하고 있는 방법은 아래와 같습니다.
//치환 변수 선언
pageContext.setAttribute("cr", "\r"); //Space
pageContext.setAttribute("cn", "\n"); //Enter
pageContext.setAttribute("crcn", "\r\n"); //Space, Enter
pageContext.setAttribute("br", "<br/>"); //br 태그
<c:set value="${fn:replace(result.nttCn, cn, br)}" var="ENT_VALUE" />
<c:out value="${fn:replace(result.nttCn, cn, br)}" escapeXml="false">
이것만으로 방어가 되는것인지요....추가적으로 해줘야 되는부분이 있는지 궁금합니다.
게시판 생성시 예제파일을 보면 <c:out value=${result.nttCn}" escapeXml="false" /> 이렇게 되어 있는데요.
그대로 사용하면 되는건가요? 조금만 자세히 알려주시면 감사드리겠습니다.
현재 제가 사용하고 있는 방법은 아래와 같습니다.
//치환 변수 선언
pageContext.setAttribute("cr", "\r"); //Space
pageContext.setAttribute("cn", "\n"); //Enter
pageContext.setAttribute("crcn", "\r\n"); //Space, Enter
pageContext.setAttribute("br", "<br/>"); //br 태그
<c:set value="${fn:replace(result.nttCn, cn, br)}" var="ENT_VALUE" />
<c:out value="${fn:replace(result.nttCn, cn, br)}" escapeXml="false">
이것만으로 방어가 되는것인지요....추가적으로 해줘야 되는부분이 있는지 궁금합니다.
A
안녕하세요. 이성규님.
기본적으로 <c:out>을 사용하시게 되면, XSS에 대하여 문제가 되는 부분은 조치가 됩니다. (다른 조치 불필요)
다만, html를 활용하여 내용을 꾸미셔야 하는 경우는 html의 tag들도 모두 변환(> 등으로)되기 때문에
디자인이 들어간 게시물의 경우는 표시가 불가능합니다.
이런 경우는 다음과 같이 XSS에 대한 부분만을 변환하시는 코드를 Controller 부분에 사용하시면 되실 것 같습니다. (이 경우는 c:out을 미적용하셔야 함)
protected String unscript(String data) {
if (data == null || data.trim().equals("")) {
return "";
}
String ret = data;
ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script");
ret = ret.replaceAll("</(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "</script");
ret = ret.replaceAll("<(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "<object");
ret = ret.replaceAll("</(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "</object");
ret = ret.replaceAll("<(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "<applet");
ret = ret.replaceAll("</(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "</applet");
ret = ret.replaceAll("<(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("</(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("<(F|f)(O|o)(R|r)(M|m)", "<form");
ret = ret.replaceAll("</(F|f)(O|o)(R|r)(M|m)", "<form");
return ret;
}
그럼, 즐거운 하루되십시오.
감사합니다.
기본적으로 <c:out>을 사용하시게 되면, XSS에 대하여 문제가 되는 부분은 조치가 됩니다. (다른 조치 불필요)
다만, html를 활용하여 내용을 꾸미셔야 하는 경우는 html의 tag들도 모두 변환(> 등으로)되기 때문에
디자인이 들어간 게시물의 경우는 표시가 불가능합니다.
이런 경우는 다음과 같이 XSS에 대한 부분만을 변환하시는 코드를 Controller 부분에 사용하시면 되실 것 같습니다. (이 경우는 c:out을 미적용하셔야 함)
protected String unscript(String data) {
if (data == null || data.trim().equals("")) {
return "";
}
String ret = data;
ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script");
ret = ret.replaceAll("</(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "</script");
ret = ret.replaceAll("<(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "<object");
ret = ret.replaceAll("</(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "</object");
ret = ret.replaceAll("<(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "<applet");
ret = ret.replaceAll("</(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "</applet");
ret = ret.replaceAll("<(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("</(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("<(F|f)(O|o)(R|r)(M|m)", "<form");
ret = ret.replaceAll("</(F|f)(O|o)(R|r)(M|m)", "<form");
return ret;
}
그럼, 즐거운 하루되십시오.
감사합니다.