Java - escape string to prevent SQL injection

前端 未结 12 2445
庸人自扰
庸人自扰 2020-11-22 01:58

I\'m trying to put some anti sql injection in place in java and am finding it very difficult to work with the the \"replaceAll\" string function. Ultimately I need a functio

12条回答
  •  面向向阳花
    2020-11-22 02:45

    After searching an testing alot of solution for prevent sqlmap from sql injection, in case of legacy system which cant apply prepared statments every where.

    java-security-cross-site-scripting-xss-and-sql-injection topic WAS THE SOLUTION

    i tried @Richard s solution but did not work in my case. i used a filter

    The goal of this filter is to wrapper the request into an own-coded wrapper MyHttpRequestWrapper which transforms:

    the HTTP parameters with special characters (<, >, ‘, …) into HTML codes via the org.springframework.web.util.HtmlUtils.htmlEscape(…) method. Note: There is similar classe in Apache Commons : org.apache.commons.lang.StringEscapeUtils.escapeHtml(…) the SQL injection characters (‘, “, …) via the Apache Commons classe org.apache.commons.lang.StringEscapeUtils.escapeSql(…)

    
    RequestWrappingFilter
    com.huo.filter.RequestWrappingFilter
    
    
    
    RequestWrappingFilter
    /*
    
    
    
    
    
    package com.huo.filter;
    
    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.ServletReponse;
    import javax.servlet.http.HttpServletRequest;
    
    public class RequestWrappingFilter implements Filter{
    
        public void doFilter(ServletRequest req, ServletReponse res, FilterChain chain) throws IOException, ServletException{
            chain.doFilter(new MyHttpRequestWrapper(req), res);
        }
    
        public void init(FilterConfig config) throws ServletException{
        }
    
        public void destroy() throws ServletException{
        }
    }
    
    
    
    
    package com.huo.filter;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    
    import org.apache.commons.lang.StringEscapeUtils;
    
    public class MyHttpRequestWrapper extends HttpServletRequestWrapper{
        private Map escapedParametersValuesMap = new HashMap();
    
        public MyHttpRequestWrapper(HttpServletRequest req){
            super(req);
        }
    
        @Override
        public String getParameter(String name){
            String[] escapedParameterValues = escapedParametersValuesMap.get(name);
            String escapedParameterValue = null; 
            if(escapedParameterValues!=null){
                escapedParameterValue = escapedParameterValues[0];
            }else{
                String parameterValue = super.getParameter(name);
    
                // HTML transformation characters
                escapedParameterValue = org.springframework.web.util.HtmlUtils.htmlEscape(parameterValue);
    
                // SQL injection characters
                escapedParameterValue = StringEscapeUtils.escapeSql(escapedParameterValue);
    
                escapedParametersValuesMap.put(name, new String[]{escapedParameterValue});
            }//end-else
    
            return escapedParameterValue;
        }
    
        @Override
        public String[] getParameterValues(String name){
            String[] escapedParameterValues = escapedParametersValuesMap.get(name);
            if(escapedParameterValues==null){
                String[] parametersValues = super.getParameterValues(name);
                escapedParameterValue = new String[parametersValues.length];
    
                // 
                for(int i=0; i

提交回复
热议问题