商务网站建设PDF下载,网上书城网站开发意义,毕业设计和论文网站,无锡新区建设局网站查了下百度#xff0c;跨站点脚本编制其实也就是在url后加入参数和js脚本实现一些坏坏的事情#xff0c;至少appscan就是这么干的。那么主要的工作就是把恶意代码给过滤了#xff0c;作为javaweb开发#xff0c;明显第一步想到的是过滤器。网上很多都是将request对象 传入H…查了下百度跨站点脚本编制其实也就是在url后加入参数和js脚本实现一些坏坏的事情至少appscan就是这么干的。那么主要的工作就是把恶意代码给过滤了作为javaweb开发明显第一步想到的是过滤器。网上很多都是将request对象 传入HttpServletRequestWrapper的子类 主要是将获取信息的方法过滤了一下主要有getParameterValuesgetParameterValues,getParameter这几个方法。也就是每次用request.getParameter(??)这些个方法时会第一时间先过滤一遍恶意代码。然而我按照appscan 的检测url 再输了一次 还是会执行js脚本原因在它传的参数我后台根本没有也就是 不会用getParamter方法来过滤一遍所以还是要将所有的parameterName循环一遍 把他们带的参数给干掉public class NoHostFilter implements Filter {public static Logger log LoggerFactory.getLogger(NoHostFilter.class);Overridepublic void destroy() {// TODO Auto-generated method stub}Overridepublic void doFilter(ServletRequest request, ServletResponse res, FilterChain chain)throws IOException, ServletException {MyServletRequest req new MyServletRequest((HttpServletRequest) request);HttpServletResponse response (HttpServletResponse) res;// 获取请求所有参数校验防止脚本注入防止XSS漏洞String url req.getRequestURI();Enumeration params req.getParameterNames();String paramN null;while (params.hasMoreElements()) {paramN (String) params.nextElement();String paramVale req.getParameter(paramN);if (!paramN.toLowerCase().contains(password)) {log.info(传参为 paramN paramVale);}// 校验是否存在SQL注入信息if (checkSQLInject(paramVale, url)) {response.sendRedirect(req.getContextPath() /error/406.jsp);}}chain.doFilter(req, response);}Overridepublic void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stub}private String xssEncode(String s) {if (s null || s.isEmpty()) {return s;}StringBuilder sb new StringBuilder(s.length() 16);for (int i 0; i s.length(); i) {char c s.charAt(i);switch (c) {case :sb.append();// 全角大于号break;case sb.append();// 全角小于号break;case \:sb.append(‘);// 全角单引号break;case \:sb.append(“);// 全角双引号break;case :sb.append();// 全角break;case \\:sb.append();// 全角斜线break;case #:sb.append();// 全角井号break;case (:sb.append(();//break;case ):sb.append());//break;default:sb.append(c);break;}}return sb.toString();}/**** 检查是否存在非法字符防止js脚本注入** param str* 被检查的字符串* return ture-字符串中存在非法字符false-不存在非法字符*/public boolean checkSQLInject(String str, String url) {if (StringUtils.isEmpty(str)) {return false;// 如果传入空串则认为不存在非法字符}// 判断黑名单String[] inj_stra { script, mid, master, truncate, insert, select, delete, update, declare,iframe, , onreadystatechange, alert, atestu, xss, ;, , \, , (, ), ,,\\, svg, confirm, prompt, onload, onmouseover, onfocus, onerror };str str.toLowerCase(); // sql不区分大小写for (int i 0; i inj_stra.length; i) {if (str.indexOf(inj_stra[i]) 0) {return true;}}return false;}}转载至链接:https://my.oschina.net/xlpapapa/blog/1636141