Подтвердить что ты не робот

Spring MVC-приложение, фильтрующее HTML в URL-адресе - это проблема безопасности?

Мое существующее приложение Spring Web MVC имеет следующее отображение обработчика в контроллере.

    @RequestMapping(method = RequestMethod.GET, value = "/welcome")

Я запускаю следующий запрос http://www.example.com/welcome, и это отлично работает.

Проблема

http://www.example.com/welcome.check.blah 

также работает!!!

Кроме того, URL-адрес запроса HTTP GET для приложения с тегом script становится повторно отображаемым, хотя он не выполняет авторизацию.

Пример http://www.example.com/welcome<script>alert("hi")</script> отображается повторно как таковой в окне браузера, и в результате моей логики авторизации отображается сообщение "Не авторизованное".

Интересно, является ли это проблемой безопасности и нужно ли мне кодировать/фильтровать код?

4b9b3361

Ответ 1

Это связано с опцией useSuffixPatternMatch, которая по умолчанию является истиной внутри RequestMappingHandlerMapping (я предполагаю, что вы используете Spring MVC 3.1).

useSuffixPatternMatch:Использовать ли совпадение шаблона ( ". *" ) При сопоставлении шаблонов с запросами. Если включено, то метод, сопоставленный с "/users", также соответствует "/users.*". Значение по умолчанию - "true".

Чтобы установить useSuffixPatternMatch в false, самый простой способ - использовать @Configuration:

@Configuration
@EnableWebMvc
public class Api extends WebMvcConfigurationSupport {

    @Override
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        RequestMappingHandlerMapping mapping = super.requestMappingHandlerMapping();
        mapping.setUseSuffixPatternMatch(false);
        return mapping;
    }

}

Ответ 2

В текущей конфигурации Spring Java есть несколько более простой способ настроить одно и то же:

@Configuration
public class DispatcherConfig extends WebMvcConfigurationSupport {

    @Override
    protected void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setUseSuffixPatternMatch(false);
    }

}

Ответ 3

Когда вы используете Spring для запроса сопоставления этого типа (т.е. "/ничего" ) Spring фактически отображает ваш контроллер на несколько URL-адресов:

/приветствовать
/welcome.*
/Добро пожаловать /

Чтобы предотвратить это - будь то более конкретным при запросе (например,/welcome.htm) или вручную сопоставьте URL-адрес контроллера в конфигурации Xml:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/welcome">YourControllerBean</prop>
            </props>
        </property>
</bean>


Приветствия, Пит

Ответ 4

Вы также можете ограничить это в web.xml, указав шаблон url. Вместо того, чтобы давать "/", вы можете указать "/.htm" в своем web.xml.

Что-то вроде

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/application/*.htm</url-pattern>
    </servlet-mapping>