삶 가운데 남긴 기록 AACII.TISTORY.COM
JAVA 보안 Improper Neutralization of Script-Related HTML Tags in a Web Page 본문
DEV&OPS/Java
JAVA 보안 Improper Neutralization of Script-Related HTML Tags in a Web Page
ALEPH.GEM 2022. 8. 17. 17:24Improper Neutralization of Script-Related HTML Tags in a Web Page 크로스 사이트 스크립트 공격 취약점
정의
외부에서 입력되는 스크립트 문자열이 웹 페이지 생성에 사용되면 생성된 웹페이지를 열람하는 사용자에게 피해를 입힐 수 있습니다.
방어 방법
jsp의 document.write() 같은 DOM 객체 출력을 수행하는 메소드의 인자 값으로 외부 입력을 사용하면 위험한 문자를 제거해야 합니다.
보안성이 검증된 API를 사용하여 위험 문자열을 제거하십시오.
안전하지 않은 코드의 예
<%
String name = request.getParameter("name");
%>
<script>
document.write("name:"+<%=name%>);
외부 입력을 그대로 이용하고 있습니다.
안전한 코드의 예
<%
String name = request.getParameter("name");
//입력값의 유효성 검사
if(name != null){
name = name.replaceAll("<","<");
name = name.replaceAll(">",">");
name = name.replaceAll("&","&");
name = name.replaceAll("\"",""");
name = name.replaceAll("\'","'");
name = name.replaceAll("/","/");
}
입력값에 대한 유효성 검사를 합니다.
안전한 코드의 예
<%
String eid = request.getParameter("eid");
String safeEID = ESAPI.encoder().encodeForHTMLAttribute(name);
%>
Employee ID: <%= safeEID %>
//생략
owasp에서 제공하는 esapi 함수중 ESAPI.encoder().encdeForHTML Attribute를 이용하여 입력값을 검증한 후 사용합니다.
안전한 코드의 예
import com.josephoconnell.html.HTMLInputFilter;
//생략
public class RequestWrapper extends HttpServletRequestWrapper{
//생략
private String filter(String input){
String clean = new HTMLInputFilter().filter(input);
return clean;
}
}
http://josephoconnell.com/java/xss-html-filter/
에서 제공하는 XSS Filter를 이용한 입력값을 필터링 합니다.
참고
http://cwe.mitre.org/data/definitions/79.html
http://cwe.mitre.org/data/definitions/80.html
728x90
'DEV&OPS > Java' 카테고리의 다른 글
JAVA 보안 Process Control (0) | 2022.08.18 |
---|---|
JAVA (javascript)보안 Eval Injection (0) | 2022.08.18 |
JAVA 보안 External Control of System or Configuration Setting (0) | 2022.08.17 |
JAVA 보안 SQL Injection: mybatis Data Map (0) | 2022.08.17 |
JAVA 보안 Reliance on Untrusted Inputs in a SecurityDecision (0) | 2022.08.17 |