• 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 body的属性 格式控制标签 内容容器标签 超链接标签 图片标签 表格
    结构体
    out 传值
    c#数组,手机号随机数抽奖
    输入月份和日期,输出是今年的第多少天,利用switch和case
    c#,for穷举,百鸡百钱
    c#条件运算符的使用,判断时间是上午还是下午
    c#关于try catch finally的使用,判断日期格式是否正确
    c#数组,例题
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7908095.html
Copyright © 2020-2023  润新知