Java過濾HTML標簽工具類


過濾HTML標簽能有效的放置XSS攻擊。

封裝:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.util.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * HTML標簽過濾工具
 *
 * @author jim
 * @date 2017/11/27
 */
public final class HtmlUtils {

    private static final Logger logger = LoggerFactory.getLogger(HtmlUtils.class);

    /**
     * 禁止實例化
     */
    private HtmlUtils() {
        throw new IllegalStateException("禁止實例化");
    }

    /**
     * 過濾HTML標簽輸出文本
     *
     * @param inputString 原字符串
     * @return 過濾后字符串
     */
    public static String Html2Text(String inputString) {
        if (StringUtils.isEmpty(inputString)) {
            return "";
        }

        // 含html標簽的字符串
        String htmlStr = inputString.trim();
        String textStr = "";
        Pattern p_script;
        Matcher m_script;
        Pattern p_style;
        Matcher m_style;
        Pattern p_html;
        Matcher m_html;
        Pattern p_space;
        Matcher m_space;
        Pattern p_escape;
        Matcher m_escape;

        try {
            // 定義script的正則表達式{或<script[^>]*?>[\\s\\S]*?<\\/script>
            String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";

            // 定義style的正則表達式{或<style[^>]*?>[\\s\\S]*?<\\/style>
            String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>";

            // 定義HTML標簽的正則表達式
            String regEx_html = "<[^>]+>";

            // 定義空格回車換行符
            String regEx_space = "\\s*|\t|\r|\n";

            // 定義轉義字符
            String regEx_escape = "&.{2,6}?;";

            // 過濾script標簽
            p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
            m_script = p_script.matcher(htmlStr);
            htmlStr = m_script.replaceAll("");

            // 過濾style標簽
            p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
            m_style = p_style.matcher(htmlStr);
            htmlStr = m_style.replaceAll("");

            // 過濾html標簽
            p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
            m_html = p_html.matcher(htmlStr);
            htmlStr = m_html.replaceAll("");

            // 過濾空格回車標簽
            p_space = Pattern.compile(regEx_space, Pattern.CASE_INSENSITIVE);
            m_space = p_space.matcher(htmlStr);
            htmlStr = m_space.replaceAll("");

            // 過濾轉義字符
            p_escape = Pattern.compile(regEx_escape, Pattern.CASE_INSENSITIVE);
            m_escape = p_escape.matcher(htmlStr);
            htmlStr = m_escape.replaceAll("");

            textStr = htmlStr;

        } catch (Exception e) {
            logger.info("Html2Text:{}", e.getMessage());
        }

        // 返回文本字符串
        return textStr;
    }
}

簡單點的方式:

/**
  * 刪除所有的HTML標簽
  *
  * @param source 需要進行除HTML的文本
  * @return
  */
public static String deleteAllHTMLTag(String source) {

  if(source == null) {
       return "";
  }

  String s = source;
  /** 刪除普通標簽  */
  s = s.replaceAll("<(S*?)[^>]*>.*?|<.*? />", "");
  /** 刪除轉義字符 */
  s = s.replaceAll("&.{2,6}?;", "");
  return s;
}

其它:

Spring HtmlUtils可以實現HTML與轉義字符之間的轉換,但不能過濾HTML標簽。

 

參考:

http://blog.csdn.net/hj7jay/article/details/51072327

https://www.cnblogs.com/shz365/p/5127271.html

http://hw1287789687.iteye.com/blog/2235927

http://blog.csdn.net/PKWind/article/details/49756429

http://blog.csdn.net/breaker892902/article/details/38556309


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM