2015-06-25 4 views
0

У меня есть servlet filter, который вызывает класс RequestWrapper для проверки и изменения заголовка запроса.HttpServletRequestWrapper - не удалось изменить заголовок запроса

public final class RequestWrapper extends HttpServletRequestWrapper

Я перекрывая getHeader метод внутри RequestWrapper класса, чтобы изменить заголовок запроса.

public String getHeader(String name) { 
    String value = super.getHeader(name); 
    if (value == null) 
     return null; 
    return removeUnexpectedCharacters(value); 
} 

private String removeUnexpectedCharacters(String value) 
{ 
    value = value.replaceAll("script", ""); 
    value = value.replaceAll("alert", ""); 
    System.out.println("before return: " + value); 
    return value; 
} 

В журналах сервера, я могу видеть, что этот код становится выполнен и это на самом деле удаления символов тоже, однако при response визуализации в браузер он содержит удаленные символы тоже.

Когда я запрашиваю страницу с сервера с указанным ниже URL-адресом, он должен удалить черные записи, такие как script, alert от username.

https://xxx:8443/ProjectName/login?username=%3E%22%27%3E%3Cscript%3Ealert%2860%29%3C%2Fscript%3E

Ожидаемый URL:

https://xxx:8443/ProjectName/login?username=%3E%22%27%3E%3C%3E%2860%29%3C%2F%3E

Я не в состоянии понять, что вопрос здесь. Может ли кто-нибудь помочь мне в этом?

+0

На самом деле большинство проблем с уязвимостью уже исправлены в приложении. Существуют две основные проблемы: 1. Невозможно удалить черный список из параметра запроса. 2. Письменный код для удаления черного списка из заголовка запроса работает не так, как ожидалось. –

+0

@BalusC Можете ли вы мне помочь в том, как удалить черный список из параметра запроса. Предположим, я должен сделать это с помощью существующего пути. Поскольку изменение все займет много времени, и я не в этом положении. Надеюсь ты понимаешь. –

ответ

0

С вашего вопроса мне кажется, что вы должны обернуть ответ с сервера, а не входящий запрос. Смотрите это: HttpServletResponseWrapper Это должно быть вопросом изменения класса Вашей обертки проходит, т.е.
от

public final class RequestWrapper extends HttpServletRequestWrapper 

в

public final class ResponseWrapper extends HttpServletResponseWrapper 

реализации не нужна менять (но я Жду» t проверить это).

+0

Я уточнил вопрос с более подробной информацией. Можете ли вы проверить, отвечает ли ваш ответ на требование? –

+0

Мне просто нужно удалить черные списки из запроса. –

+0

О, я вижу. Можете ли вы проверить, получает ли код сервера, который использует параметр имени пользователя, очищенное значение или нет? –