XSS문자 Script , ‘, ” 에 대해 정말 정상 범위가 아닌지 검사하기.

  • script 앞뒤로 특수문자가 오는경우 (XSS)
  • ‘, “의 앞뒤로 구조체 관련 특수문자가 오는 경우는 XSS적용하지 않음.
/**
 * @param value
 */
private String replaceScriptForXss(final String value) {
   StringBuilder builder = new StringBuilder(value);
   Pattern p = Pattern.compile("(?i)" + "script"); // 정규표현식 사용
   Matcher m = p.matcher(value);
   int pos = 0;
   while (m.find(pos)) {
      pos = m.start(); // <- str_to_find의 시작 index 리턴
      m.end(); // <- str_to_find의 끝 index 리턴
      if (m.start() - 1 >= 0 && m.end() + 1 <= builder.length()) {
         String temp = builder.substring(m.start() - 1, m.end() + 1);
         if (!temp.matches("^[a-zA-Z0-9]*$")) {
            builder = builder.replace(m.start(), m.end(), " ");
         }
      }
      m = p.matcher(builder.toString());
      pos++;
   }
   return builder.toString();
}

/**
 * @param value
 */
private String replaceQuotForXss(final String value, final String quot) {
   StringBuilder builder = new StringBuilder(value);
   int pos = builder.indexOf(quot);
   while (pos > -1) {
      if (pos - 1 >= 0 && pos + 2 <= builder.length()) {
         String temp = builder.substring(pos - 1, pos + 2);
         if (!StringUtils.containsAny(temp, new char[] { '{', '}', ':', ',', '[', ']' })) {
            if (temp.contains("\\" + quot)) {
               builder = builder.replace(pos - 1, pos + 1, "&quot;");
            } else {
               builder = builder.replace(pos, pos + 1, "&quot;");
            }
         }
      }
      pos = builder.indexOf(quot, pos + 1);
   }
   return builder.toString();
}

You may also like...

답글 남기기

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