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);
}

You may also like...

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.