美文网首页web&Request安全
Web开发中的 XSS、CSRF/XSRF、CORS

Web开发中的 XSS、CSRF/XSRF、CORS

作者: 小丸子的呆地 | 来源:发表于2021-06-10 13:39 被阅读0次

    XSS

    跨站脚本攻击

    向正常网站的表单中注入恶意脚本代码,窃取网站私有内容,比如窃取cookies、localstorage、sessionstorage的内容。

    防御策略

    设置cookies为HttpOnly 使cookie不可被js读取操作。

    CSRF/XSRF

    跨站请求伪造

    诱导用户在恶意网站内点击链接,链接请求正常网站的功能业务,会自动携带正常网站的cookies,在用户不知情的情况下完成一些操作。

    防御策略
    1. 健强服务端逻辑,严格restful风格,可以防御一些低端的攻击。
    2. 利用请求头中的refer内容,refer是浏览器在发起请求是设置的当前请求来源网站的信息,可以防御绝大部分的攻击。
    3. 每次请求需要用户填写验证码,可以防御所有攻击,当然这种方式体验太差。
    4. x-xsrf-token,在发起请求前由前端从cookie中读取一个随机token,这个token可能是之前种下的,写到header中,因为只有同一个域下的js才能访问cookie(未设置httponly的),可以防御所有攻击。

    CORS

    Cross-origin resource sharing 跨域资源共享
    1. 对于客户端,我们还是正常使用xhr对象发送ajax请求。
      唯一需要注意的是,我们需要设置我们的xhr属性withCredentials为true,不然的话,cookie是带不过去的哦,设置: xhr.withCredentials = true;
    2. 对于服务器端,需要在 response header中设置如下两个字段:
      Access-Control-Allow-Origin: [http://www.yourhost.com]
      Access-Control-Allow-Credentials:true
      这样,我们就可以跨域请求接口了。
    public class CrossFilter implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            HttpServletRequest httpServletRequest = (HttpServletRequest) request;
            HttpServletResponse httpServletResponse = (HttpServletResponse) response;
            String origin = httpServletRequest.getHeader("origin");
            if (StringUtil.isNotBlank(origin)) {
                httpServletResponse.setHeader("Access-Control-Allow-Origin", origin);
                httpServletResponse.setHeader("Access-Control-Max-Age", "600");
                httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
                if (httpServletRequest.getMethod().equalsIgnoreCase("OPTIONS")) {
                    httpServletResponse.setStatus(200);
                    httpServletResponse.setHeader("Access-Control-Allow-Methods", "OPTIONS, GET, PUT, POST, DELETE");
                    httpServletResponse.setHeader("Access-Control-Allow-Headers",
                            "x-requested-with, accept, origin, content-type");
                    httpServletResponse.setHeader("Content-Type", "application/json;charset=utf-8");
                    return;
                }
            }
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {
    
        }
    }
    
    1. jsonp访问跨域资源

    相关文章

      网友评论

        本文标题:Web开发中的 XSS、CSRF/XSRF、CORS

        本文链接:https://www.haomeiwen.com/subject/enueeltx.html