Como lidar com @queryParam para limpar valores XSS prejudiciais

Estou usando o javax.ws e gostaria de saber se existe uma forma de adicionar um filtro que higienize o parâmetro @queryParam que estou usando:

@GET
@Path("myMethod")
public Response myMethod(@QueryParam("id") Long id) {
    // Need to change the value of this data to clean XSS
    // the parameter to be sanitized is the id
    // Code to save data into database
    return Response.ok().build();
}

Ao processar uma solicitação GET, como higienizar o tipo Long?

O tipo Long eu acredito não ser passível de XSS, pois ao tentar enviar um script aleatório a aplicação vai tentar realizar o binding para o tipo esperado e vai lançar um erro.

Se fosse um parâmetro do tipo String aí sim poderia ser um problema, e nesse caso poderia aplicar um filter na request e validar o valor recebido no parâmetro.

1 curtida

uma ferrmenta que a empresa utiliza alertou possíveis vulnerabilidades de ataque XSS na execução do link (algumas informaçoes do link foram omitidas)
ABC Home Page - ABC.com


e o meu controller é dessa forma:

@GET
@Path("myMethod")
public Response myMethod(@QueryParam("id") Long id) {
    // Need to change the value of this data to clean XSS
    // the parameter to be sanitized is the id
    // Code to save data into database
    return Response.ok().build();
}

mesmo sendo pouco provável que a execução do javascript adentre no código, como evito pelo menos a instrução javascript que aparece na imagem acima?

Você pode criar um filter para suas requests e validar se o path recebido na requisição contém tags HTML como a tag script que mostrou no seu print, e caso contenha você pode escolher o que fazer, exemplo:

  • Devolver uma resposta de erro de request inválida.
  • Fazer um cleanup na URL removendo os blocos suspeitos e executar a request.

De toda forma, precisaria avaliar como sua aplicação funciona, se ela for server side o código está sendo executado no servidor da aplicação backend, se sua aplicação tem o front apartado do backend o front precisa ser revisitado da mesma forma que o backend.