zoukankan      html  css  js  c++  java
  • 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*|	|
    |
    ";
    
                // 定义转义字符
                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

  • 相关阅读:
    HTML/网站一键打包APK工具(html网页打包安卓APP应用)
    四款最好用的html转苹果APP免上架免签名打包在线生成工具
    ios11,弹出层内的input框光标错位
    前端进阶小知识
    html数据交互小知识
    H5特殊情况解决方案
    H5个人不常用但感觉很重要的东西
    H5小知识
    Java SE 8 Programmer复习小结
    JSP页面中onSubmit方法不执行
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7908095.html
Copyright © 2011-2022 走看看