• XSS攻击及解决方案


    原创itcats_cn 最后发布于2018-09-03 01:05:54 阅读数 3243 收藏
    展开
    什么是XSS攻击?
    XSS攻击使用Javascript脚本注入进行攻击

    XSS攻击常出现在提交表单中,如博客的评论区等,用户可以通过提交评论:<script>alert("你的网站太垃圾了!")</script>,那么只要访问该页面的用户都会弹窗,当然,这可能是为了娱乐娱乐,不要小看XSS攻击,有些人利用XSS攻击窃取用户名密码,调用黑客的工程,将用户名和密码发送过去,也可以伪装成钓鱼网站。

    例如在表单中注入: <script>location.href='http://www.xxx.com'</script> 那么页面会跳转到xxx.com

    还可以根据js获取本地浏览器的cookie信息,根据cookie信息完全可以模拟用户。

    注意:谷歌浏览器 已经防止了XSS攻击,为了演示效果,最好使用火狐浏览器。

    那么该如何防止XSS攻击呢?
    实现思路:

    使用转义解决。将<转义为&lt    >转义为&gt

    ①使用过滤器,拦截所有请求,重写request

    ②重写获取值的方法,将特殊代码转换成html

    具体代码实现:

    XssHttpServletRequest.java

    package cn.itcats;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;

    import org.apache.commons.lang3.StringEscapeUtils;
    import org.apache.commons.lang3.StringUtils;

    public class XssHttpServletRequest extends HttpServletRequestWrapper{
    private HttpServletRequest request;

    //需要重写构造方法
    public XssHttpServletRequest(HttpServletRequest request) {
    super(request);
    this.request = request;
    }

    //需要重写getParameter(name)方法,将value进行转义
    public String getParameter(String name) {
    String value = request.getParameter(name);
    System.out.println("没有转义之前:value="+value);
    if(StringUtils.isNotBlank(value)){
    //转化为html,<script>标签都会转化为html格式 &lt;script&gt;
    //工具类来自于org.apache.commons.lang3.StringEscapeUtils
    value = StringEscapeUtils.escapeHtml4(value);
    }
    return value;
    }

    }
    web.xml配置过滤器

    <!-- 防止XSS攻击 -->
    <filter>
    <filter-name>FilterXSS</filter-name>
    <filter-class>cn.itcats.FilterXSS</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>FilterXSS</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
     

    FilterXss.java

    package cn.itcats;

    import java.io.IOException;

    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;

    public class FilterXSS implements Filter{

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {
    //强转为HttpServletRequest
    HttpServletRequest req = (HttpServletRequest)request;
    //需要重写request,重建一个类XssHttpServletRequest 继承 HttpServletRequestWrapper,重写构造和getParameter方法
    XssHttpServletRequest xssHttpServletRequest = new XssHttpServletRequest(req);
    //务必传入是重写过的request,放行
    chain.doFilter(xssHttpServletRequest, response);
    }

    public void destroy() {

    }

    }
     

    注意:只要是文本框、表单等,需要提交并在页面展示的,一般都需要做防XSS攻击。


    ————————————————
    版权声明:本文为CSDN博主「itcats_cn」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/itcats_cn/article/details/82321893

  • 相关阅读:
    hibernate注解note
    hibernate的批量删除
    hibernate实现多表联合查询
    hibernate联合主键注解方式
    jsp之radio取值与赋值
    @Transient注解的使用
    工程师如何在工作中提升自己?(公众号)
    HTML中让表单input等文本框为只读不可编辑的方法
    ajax, jQuery, jQueryeasyUI
    关于easyui的问答(来自百度问答)
  • 原文地址:https://www.cnblogs.com/fengff/p/12576709.html
Copyright © 2020-2023  润新知