如何过滤@PathParam以进行xss保护?

时间:2018-07-31 08:03:02

标签: spring filter xss

如何在Spring中为xss过滤@PathParam?

实际上,在xss保护的情况下,我需要过滤此输入:

  1. 查询字符串(例如/ name / {name})-这就是我要的
  2. 标头(已完成-ContainerRequestFilter的实现)
  3. Cookies(已完成-ContainerRequestFilter的实现)
  4. 参数(完成-ContainerRequestFilter的实现)
  5. 零件(多部分内容)

XSSFilter已完成并正在运行,但是如何将其与URL参数结合起来?

1 个答案:

答案 0 :(得分:0)

这是我的解决方法:

    ContainerRequestContext request;

    //clean request body
    if(request.getMethod().equals(HttpMethod.PUT) || request.getMethod().equals(HttpMethod.POST) || request.getMethod().equals(HttpMethod.DELETE)) {
        StringWriter writer = new StringWriter();
        IOUtils.copy(request.getEntityStream(), writer, Charset.forName("UTF-8"));
        request.setEntityStream(IOUtils.toInputStream(stripXSS(writer.toString())));
    }

    //clean request path params
    String cleanRawPath = stripXSS(request.getUriInfo().getRequestUri().getRawPath());

    //clean request query params
    String cleanRawQuery = stripXSS(request.getUriInfo().getRequestUri().getRawQuery());

    //clean headers
    //cleanHeaders(request.getHeaders());
    private void cleanHeaders( MultivaluedMap<String, String> headers )
{
    for( Map.Entry<String, List<String>> header : headers.entrySet() )
    {
        String key = header.getKey();
        List<String> values = header.getValue();

        List<String> cleanValues = new ArrayList<String>();
        for( String value : values ) {
            cleanValues.add( stripXSS( value ) );
        }

        headers.put( key, cleanValues );
    }
}

//clean cookies
//cleanCookies(request.getCookies());
private void cleanCookies( Map<String, Cookie> cookies )
{
    for( Map.Entry<String, Cookie> cookie : cookies.entrySet() )
    {
        String key = cookie.getKey();
        Cookie value = cookie.getValue();
        cookies.put( key, new Cookie(key, stripXSS(value.getValue())));
    }
}