Iterator 돌려 parameterValues 모든 param검사 후 XSS필터 적용하기
운영중인 서비스의 모든 parameter에 XSS를 적용해야 하는 상황이어서 아래와 같이 상황에 따라
적용을 달리하는 parameter를 나누어 적용하였다.
Iterator를 이용하여 구조체 안 구조체까지 검사하나, 세단계까지는 가지 못한다.
나중에 재귀하여 풀도록 구조를 변경 해봐야겠다.
Logger log = Logger.getLogger(this.getClass()); String[] noXssParam = { "pass", "xml", "msg", "data", "login", "userid", "html", "param", "adminipin" }; String[] noXssQuotParam = { "email", "file", "contents", "cnt", "addr", "url", "target", "info", "link", "titl", "cont", "search", "subject", "txt", "path", "name", "mob", "phone", "info", "expl", "tel", "key", "img", "array", "value", "text", "datepicker", "frdy", "tody" }; @Override public String[] getParameterValues(final String parameter) { String[] values = super.getParameterValues(parameter); if (values == null) { return null; } int count = values.length; String[] encodedValues = new String[count]; for (int i = 0; i < count; i++) { JSONObject json = new JSONObject(); try { if (values[i].startsWith("{")) { json = JSONObject.fromObject(values[i]); Iterator keyItor = json.keySet().iterator(); while (keyItor.hasNext()) { String key = keyItor.next().toString(); if (json.getString(key).startsWith("{")) { JSONObject json2 = JSONObject.fromObject(json.getString(key)); Iterator keyItor2 = json2.keySet().iterator(); while (keyItor2.hasNext()) { String key2 = keyItor2.next().toString(); json2.put(key2, this.noXss(key2, json2.getString(key2))); } json.put(key, json2.toString()); } else { json.put(key, this.noXss(key, json.getString(key))); } } values[i] = json.toString(); } } catch (Exception e) { this.log.error("RequestWrapper.getParameterValues 오류" + e.getMessage()); } encodedValues[i] = values[i]; // System.out.println("getParameterValues in RequestWrapper : " + values[i] + " ||||| " + parameter); } // for (int i = 0; i < encodedValues.length; i++) { // this.log.info("아웃:" + encodedValues[i]); // } return encodedValues; } @Override public String getParameter(final String parameter) { String value = super.getParameter(parameter); if (value == null) { return null; } if (StringUtils.isNotEmpty(parameter)) { Iterator noXssit = Arrays.asList(this.noXssParam).iterator(); Iterator noXssQuotit = Arrays.asList(this.noXssQuotParam).iterator(); while (noXssit.hasNext()) { if (parameter.toLowerCase().indexOf(noXssit.next().toString()) > -1) { return value; } } while (noXssQuotit.hasNext()) { if (parameter.toLowerCase().indexOf(noXssQuotit.next().toString()) > -1) { return CommonUtil.restoreQuotAfterXss(value); } } } // System.out.println("getParameter in RequestWrapper : " + value + " ||||| " + parameter); return this.cleanXSS(value); }
최근 댓글