跨站脚本漏洞

举报
Nick Qiu 发表于 2020/10/25 21:00:42 2020/10/25
【摘要】 跨站脚本漏洞同步滚动:开漏洞描述黑客在input或者url上输入非法字符,如<ScRiPt>confirm(4890)<cRiPt>,则在网页上弹出确认窗口,相关的脚本被非法执行了。修复方法给程序做一个拦截器,拦截请求,转换一些特殊符号,应用中一般不会有这些特殊符号,如果有这些特殊符号,则按规则还原。具体操作编写一个过滤器处理转义字符public class XssFilter implem...

跨站脚本漏洞

同步滚动:

漏洞描述

黑客在input或者url上输入非法字符,如<ScRiPt>confirm(4890)<cRiPt>,则在网页上弹出确认窗口,相关的脚本被非法执行了。


image.png

修复方法

给程序做一个拦截器,拦截请求,转换一些特殊符号,应用中一般不会有这些特殊符号,如果有这些特殊符号,则按规则还原。

具体操作

  • 编写一个过滤器处理转义字符

public class XssFilter implements Filter {    @Override
    public void destroy() {
    }    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {        //chain.doFilter(request, response);//放行
        chain.doFilter(new XssHttpServletRequestWrapperNew(
                (HttpServletRequest) request), response);
    }    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }
}
public class XssHttpServletRequestWraper extends HttpServletRequestWrapper {    public XssHttpServletRequestWraper(HttpServletRequest request) {        super(request);

    }    @Override
    public String getParameter(String name) {        return clearXss(super.getParameter(name));
    }    @Override
    public String getHeader(String name) {        return clearXss(super.getHeader(name));
    }    @Override
    public String[] getParameterValues(String name) {        // 处理路径中的转义字符
        String[] values = super.getParameterValues(name);
        String[] newValues = new String[values.length];        for (int i = 0; i < values.length; i++) {
            newValues[i] = clearXss(values[i]);
        }        return newValues;
    }    // 清除路径中的转义字符
    public String clearXss(String value) {        if (value == null || "".equals(value)) {            return value;
        }

        value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
        value = value.replaceAll("\\(", "&#40;").replace("\\)", "&#41;");
        value = value.replaceAll("'", "&#39;");
        value = value.replaceAll("eval\\((.*)\\)", "");
        value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']",                "\"\"");
        value = value.replace("script", "");        return value;
    }

}
  • 在web.xml中注册该过滤器

    <filter>
        <filter-name>XssFilter</filter-name>
        <filter-class>com.fangle.filter.XssFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>XssFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。