zoukankan      html  css  js  c++  java
  • filter防止xxs攻击

    什么是XSS攻击?

    XSS攻击使用Javascript脚本注入进行攻击

    例如在表单中注入: <script>location.href='http://www.itmayiedu.com'</script>

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

    fromToXss.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <form action="XssDemo" method="post">
            <input type="text" name="userName"> <input type="submit">
        </form>
    </body>
    </html>

    XssDemo

    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/XssDemo")
    public class XssDemo extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String userName = req.getParameter("userName");
            req.setAttribute("userName", userName);
            req.getRequestDispatcher("showUserName.jsp").forward(req, resp);
        }
        
    
    }

    代码: showUserName.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    
    </head>
    <body>userName:${userName}
    
    </body>
    </html>

    解决方案:

    使用Fileter过滤器过滤器注入标签

    XSSFilter

    public class XssFiter implements Filter {
    
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            HttpServletRequest req = (HttpServletRequest) request;
            XssAndSqlHttpServletRequestWrapper xssRequestWrapper = new XssAndSqlHttpServletRequestWrapper(req);
            chain.doFilter(xssRequestWrapper, response);
        }
    
        public void destroy() {
    
        }
    
    }

    XssAndSqlHttpServletRequestWrapper

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    import org.apache.commons.lang3.StringEscapeUtils;
    import org.apache.commons.lang3.StringUtils;
    
    /**
     * 防止XSS攻击
     */
    public class XssAndSqlHttpServletRequestWrapper extends HttpServletRequestWrapper {
        HttpServletRequest request;
        public XssAndSqlHttpServletRequestWrapper(HttpServletRequest request) {
            super(request);
            this.request = request;
        }
        @Override
        public String getParameter(String name) {
            String value = request.getParameter(name);
            System.out.println("name:" + name + "," + value);
            if (!StringUtils.isEmpty(value)) {
                // 转换Html
                value = StringEscapeUtils.escapeHtml4(value);
            }
            return value;
        }
    }
  • 相关阅读:
    操作系统的发展史
    多线程的些许理解(平台x86,具体考虑linux,windows)
    C++ 11 智能指针
    C++虚函数和纯虚函数
    Qt之excel 操作使用说明
    查找之二叉排序树
    图的一些总结
    树的一些总结
    直接插入排序
    冒泡和选择排序
  • 原文地址:https://www.cnblogs.com/xiufengchen/p/10404554.html
Copyright © 2011-2022 走看看