jfinal框架中防跨站脚本XSS攻击。

您所在的位置:网站首页 jfinal拦截入参注入字符 jfinal框架中防跨站脚本XSS攻击。

jfinal框架中防跨站脚本XSS攻击。

#jfinal框架中防跨站脚本XSS攻击。| 来源: 网络整理| 查看: 265

       跨站脚本攻击(XSS)

       Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。

     问题解决:

      对于Jfinal轻量级框架解决方式从框架根本从http请求传输过程中特殊字符转义入手。

     1、处理器配置初始化

         public void configHandler(Handlers me) { XssHandler xssHandler = new XssHandler(); me.add(xssHandler); }

    2、配置Handler

package com.flysoft.jfinal.core; /* * @author hzq * @data 2021-05-1820:34 * 防止XSS攻击 * */ import com.jfinal.handler.Handler; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class XssHandler extends Handler { @Override public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) { request = new XssRequestWrapper(request); next.handle(target, request, response, isHandled); } }

3.配置HttpServletRequestWrapper类       

package com.flysoft.jfinal.core; /* * @author hzq * @data 2021-05-18 20:36 * 防止XSS攻击 * */ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.regex.Pattern; public class XssRequestWrapper extends HttpServletRequestWrapper { private HttpServletRequest request; public XssRequestWrapper(HttpServletRequest request) { super(request); this.request = request; } /** * 重写getParameter方法 */ @Override public String getParameter(String name) { String value = super.getParameter(name); if (value == null) { return null; } value = format(value); return value; } /** * 重写getParameterMap */ @Override @SuppressWarnings("unchecked") public Map getParameterMap() { HashMap paramMap = (HashMap) super.getParameterMap(); paramMap = (HashMap) paramMap.clone(); for (Iterator iterator = paramMap.entrySet().iterator(); iterator.hasNext(); ) { Map.Entry entry = (Map.Entry) iterator.next(); String [] values = entry.getValue(); for (int i = 0; i < values.length; i++) { if(values[i] instanceof String){ values[i] = format(values[i]); } } entry.setValue(values); } return paramMap; } /** * 重写getParameterValues */ @Override public String[] getParameterValues(String name) { try { String[] values = super.getParameterValues(name); int count = values.length; //可能抛空指针 String[] encodedValues = new String[count]; for (int i = 0; i < count; i++) { encodedValues[i] = format(values[i]); } return encodedValues; }catch (Exception e){ return null; } } /** * 重写getHeader */ @Override public String getHeader(String name) { // TODO Auto-generated method stub return format(super.getHeader(name)); } public String filter(String message) { if (message == null) return (null); message = format(message); return message; } /** * @desc 统一处理特殊字符的方法,替换掉sql和js的特殊字符 * @param name 要替换的字符 */ private String format(String name) { return xssEncode(name); } /** * 将容易引起xss & sql漏洞的半角字符直接替换成全角字符 * * @param s * @return */ private static String xssEncode(String s) { if (s == null || s.isEmpty()) { return s; }else{ s = stripXSSAndSql(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 '


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3