为了账号安全,请及时绑定邮箱和手机立即绑定

appscan扫描出sql注入

appscan扫描出sql注入

慕的地6264312 2019-04-24 18:15:50
最近项目进行安全测试,用appscan扫描出sql注入,发现在参数后拼入%uFF07这类字符后,过滤器request.getParameterNames()就会有异常(但是捕获不到这个异常),并且自动把带%uFF07的参数key和value自动忽略,也就检测不到有sql注入了,,,这样有个解决方法是可以在过滤器中用request.getInputStream()来获取IO流,即可检测到%,,,但是又有一个问题:getParameterNames()和getInputStream()又不能共存使用,在过滤器中若用getInputStream(),则项目其他地方request.getParameter就会有问题,所以谁有好的办法呢???就是图片中这样,过滤器request.getParameterName()就获取不到"value"属性和对应的值
查看完整描述

4 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

Parameter [value] with value [1234%uFF07] has been ignored.说明处理参数的值的时候,忽略了。所以

查看完整回答
反对 回复 2019-05-16
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

有个方法可以试一试,写个类继承javax.servlet.http.HttpServletRequestWrapper,重写里面的方法,做转义或者一些其他的操作,在过滤doFilter方法里面, XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request); 

查看完整回答
反对 回复 2019-05-16
?
函数式编程

TA贡献1807条经验 获得超9个赞

public class RequestWrapper extends HttpServletRequestWrapper {
    HttpServletRequest orgRequest = null;

    public RequestWrapper(HttpServletRequest request) { 
        super(request); 
        orgRequest = request; 
    } 

   @Override
   public Map<String,String[]> getParameterMap() {
       Map<String,String[]> map = new LinkedHashMap();
       Map<String,String[]> parameters = super.getParameterMap();
       for (String key : parameters.keySet()) {
           System.out.println("getParameterMap---------得到的key:" + key);
           String[] values = parameters.get(key);
           for (int i = 0; i < values.length; i++) {
               values[i] = XssClean.xssClean(values[i]);
           }
           map.put(key, values);
       }
       return map;
   }

    @Override
    public Enumeration<String> getParameterNames() {
        Enumeration enumeration = super.getParameterNames();
        String attributeName = "";
        while (enumeration.hasMoreElements()) {
            attributeName = (String) enumeration.nextElement();
            getParameterValues(attributeName);
        }
        return enumeration;
    }

    @Override
   public String[] getParameterValues(String paramString){ 
     String[] arrayOfString1 = super.getParameterValues(paramString); 
     if (arrayOfString1 == null) {
         return null;
     }
     int i = arrayOfString1.length;
     String[] arrayOfString2 = new String[i]; 
     for (int j = 0; j < i; j++) {
         System.out.println("getParameterValues---------得到的key:" + arrayOfString1[j]);
         arrayOfString2[j] =XssClean.xssClean(arrayOfString1[j]);
     }
     return arrayOfString2;
   }

    @Override
   public String getParameter(String paramString){ 
     String str = super.getParameter(paramString); 
     if (str == null) {
         return null;
     }
     return XssClean.xssClean(str);
   } 

   public String getHeader(String paramString) { 
     String str = super.getHeader(paramString); 
     if (str == null) 
       return null; 
     return XssClean.xssClean(str); 
   }

   public String getQueryString() {
        String value = super.getQueryString();
        if (value != null) {
                value = XssClean.xssClean(value);
        }
        return value;
 }

还是运行上面那个有问题的sql注入的请求,输出依旧没有“value”

getParameterMap---------得到的key:id
getParameterMap---------得到的key:label
getParameterMap---------得到的key:type
getParameterMap---------得到的key:description
getParameterMap---------得到的key:sort
getParameterMap---------得到的key:remarks


查看完整回答
反对 回复 2019-05-16
  • 4 回答
  • 0 关注
  • 2889 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号