猿问

appscan扫描出sql注入

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

  • 就是图片中这样,过滤器request.getParameterName()就获取不到"value"属性和对应的值


慕的地6264312
浏览 2890回答 4
4回答

GCT1015

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

Smart猫小萌

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

函数式编程

public&nbsp;class&nbsp;RequestWrapper&nbsp;extends&nbsp;HttpServletRequestWrapper&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;orgRequest&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;RequestWrapper(HttpServletRequest&nbsp;request)&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(request);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orgRequest&nbsp;=&nbsp;request;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; &nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;public&nbsp;Map<String,String[]>&nbsp;getParameterMap()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map<String,String[]>&nbsp;map&nbsp;=&nbsp;new&nbsp;LinkedHashMap(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map<String,String[]>&nbsp;parameters&nbsp;=&nbsp;super.getParameterMap(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(String&nbsp;key&nbsp;:&nbsp;parameters.keySet())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("getParameterMap---------得到的key:"&nbsp;+&nbsp;key); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;values&nbsp;=&nbsp;parameters.get(key); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;values.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i]&nbsp;=&nbsp;XssClean.xssClean(values[i]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(key,&nbsp;values); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;map; &nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Enumeration<String>&nbsp;getParameterNames()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;enumeration&nbsp;=&nbsp;super.getParameterNames(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;attributeName&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(enumeration.hasMoreElements())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributeName&nbsp;=&nbsp;(String)&nbsp;enumeration.nextElement(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getParameterValues(attributeName); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;enumeration; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;public&nbsp;String[]&nbsp;getParameterValues(String&nbsp;paramString){&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;arrayOfString1&nbsp;=&nbsp;super.getParameterValues(paramString);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(arrayOfString1&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i&nbsp;=&nbsp;arrayOfString1.length; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;arrayOfString2&nbsp;=&nbsp;new&nbsp;String[i];&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;<&nbsp;i;&nbsp;j++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("getParameterValues---------得到的key:"&nbsp;+&nbsp;arrayOfString1[j]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrayOfString2[j]&nbsp;=XssClean.xssClean(arrayOfString1[j]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;arrayOfString2; &nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getParameter(String&nbsp;paramString){&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;super.getParameter(paramString);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(str&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;XssClean.xssClean(str); &nbsp;&nbsp;&nbsp;}&nbsp; &nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getHeader(String&nbsp;paramString)&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;super.getHeader(paramString);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(str&nbsp;==&nbsp;null)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;XssClean.xssClean(str);&nbsp; &nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getQueryString()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;=&nbsp;super.getQueryString(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;XssClean.xssClean(value); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;value; &nbsp;}还是运行上面那个有问题的sql注入的请求,输出依旧没有“value”getParameterMap---------得到的key:id getParameterMap---------得到的key:label getParameterMap---------得到的key:type getParameterMap---------得到的key:description getParameterMap---------得到的key:sort getParameterMap---------得到的key:remarks
随时随地看视频慕课网APP

相关分类

Java
我要回答