Приложение Spring MVC, фильтрующее HTML в URL - это проблема безопасности? - PullRequest
12 голосов
/ 13 марта 2012

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

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

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

Проблема в

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

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

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

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

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

Ответы [ 5 ]

15 голосов
/ 13 марта 2012

Такое поведение обусловлено параметром 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;
    }

}
3 голосов
/ 31 августа 2017

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

@Configuration
public class DispatcherConfig extends WebMvcConfigurationSupport {

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

}
1 голос
/ 04 июня 2012

Вы можете использовать свойство useDefaultSuffixPattern .

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="useDefaultSuffixPattern" value="false" />
</bean>

Также см. Ограничение шаблона URL в SPRING MVC

1 голос
/ 13 марта 2012

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

Что-то вроде

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/application/*.htm</url-pattern>
    </servlet-mapping>
1 голос
/ 13 марта 2012

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

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

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

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


Ура, Пит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...