[XSS] 처리

2015. 4. 8. 15:01IT/Web-Java

- 주소창에서 스크립트 실행시 시스템에서 막는 것

> 스크립트 실행은 클라이언트단에서 발생하는데, input의 value에 들어가는 것은 상관없고, 각 태그 안에 스크립트가 포함될시 XSS 발생 위험이 있음

> Popup.jsp, Sub.jsp, 각 목록, 각 상세조회 화면에서 su.getHtml()코드로 주고받는 파라미터 변환해주기


↓ 안된다 


>> 메인 컨트롤러에서의 처리

Enumeration<?> enum1 = request.getParameterNames();

while(enum1.hasMoreElements()) {

String setKey = enum1.nextElement().toString();

String setValue = request.getParameter(setKey );

setValue.replaceAll("<", "&lt;");

setValue.replaceAll(">", "&rt;");

setValue.replaceAll("&", "&amp;");

request.setAttribute(setKey, setValue);

}


// 메인 컨트롤러에서 치환이 되면 화면에 다시 set해주는 부분도 치환을 해야한다. 

// 예를 들어, input박스???에는 역으로 &lt;들을 <로 바꿔주는 녀석을...




// 2014.06.17 추가 - 변환 (DB 입력)

// XSS필터 : 크로스 사이트 스크립트[Cross Site Scription]

public String getXSSFilter(String value) {

value = value.replaceAll("&", "&amp;");

value = value.replaceAll("#", "&#35;");

value = value.replaceAll(";", "&#59;");

value = value.replaceAll("\\\\", "&#92;");

value = value.replaceAll("<"  , "&lt;");

value = value.replaceAll(">"  , "&gt;");

value = value.replaceAll("\\(", "&#40;");

value = value.replaceAll("\\)", "&#41;");

value = value.replaceAll("'"  , "&#39;");


value = value.replaceAll("\"", "&quot;");

value = value.replaceAll("[$]", "&#36;");

value = value.replaceAll("[*]", "&#42;");

value = value.replaceAll("[+]", "&#43;");

value = value.replaceAll("[|]", "&#124;");

value = value.replaceAll("\\." , "&#46;");

value = value.replaceAll("\\?" , "&#63;");

value = value.replaceAll("\\[" , "&#91;");

value = value.replaceAll("\\]" , "&#93;");

value = value.replaceAll("\\^" , "&#94;");

value = value.replaceAll("\\{" , "&#123;");

value = value.replaceAll("\\}" , "&#125;");

value = value.replaceAll("!", "&#33;");

value = value.replaceAll("%", "&#37;");

value = value.replaceAll(",", "&#44;");

value = value.replaceAll("-", "&#45;");

value = value.replaceAll("/", "&#47;");

value = value.replaceAll(":", "&#58;");

value = value.replaceAll("=", "&#61;");

value = value.replaceAll("@", "&#64;");

value = value.replaceAll("_", "&#95;");

value = value.replaceAll("`", "&#96;");

value = value.replaceAll("~", "&#126;");

return value;

}


// 2014.06.17 추가 - 변환 (DB 입력)

// XSS필터 : 크로스 사이트 스크립트[Cross Site Scription]

public String getReXSSFilter(String value) {

value = value.replaceAll("&amp;", "&");

value = value.replaceAll("&#35;", "#");

value = value.replaceAll("&#59;", ";");

value = value.replaceAll("&#92;", "\\\\");

value = value.replaceAll("&lt;" , "<");

value = value.replaceAll("&gt;" , ">");

value = value.replaceAll("&#40;", "(");

value = value.replaceAll("&#41;", ")");

value = value.replaceAll("&#39;", "'");

value = value.replaceAll("&quot;", "\"");

value = value.replaceAll("&#36;" , "\\$");

value = value.replaceAll("&#42;" , "*");

value = value.replaceAll("&#43;" , "+");

value = value.replaceAll("&#124;", "|");

value = value.replaceAll("&#46;" , "\\.");

value = value.replaceAll("&#63;" , "\\?");

value = value.replaceAll("&#91;" , "\\[");

value = value.replaceAll("&#93;" , "\\]");

value = value.replaceAll("&#94;" , "\\^");

value = value.replaceAll("&#123;", "\\{");

value = value.replaceAll("&#125;", "\\}");

value = value.replaceAll("&#33;" , "!");

value = value.replaceAll("&#37;" , "%");

value = value.replaceAll("&#44;" , ",");

value = value.replaceAll("&#45;" , "-");

value = value.replaceAll("&#47;" , "/");

value = value.replaceAll("&#58;" , ":");

value = value.replaceAll("&#61;" , "=");

value = value.replaceAll("&#64;" , "@");

value = value.replaceAll("&#95;" , "_");

value = value.replaceAll("&#96;" , "`");

value = value.replaceAll("&#126;", "~");

return value;

}