Spring MVC应用程序在URL中过滤HTML - 这是一个安全问题吗?

Rag*_*hav 12 java security spring http spring-mvc

我现有的Spring Web MVC应用程序在Controller中具有以下处理程序映射.

    @RequestMapping(method = RequestMethod.GET, value = "/welcome")
Run Code Online (Sandbox Code Playgroud)

我触发以下请求http://www.example.com/welcome,这很好.

问题是

http://www.example.com/welcome.check.blah 
Run Code Online (Sandbox Code Playgroud)

也有效!!!

此外,具有脚本标记的应用程序的HTTP GET请求URL即使未通过授权也会重新显示.

示例http://www.example.com/welcome<script>alert("hi")</script>在浏览器窗口中被重新显示,并且由于我的授权逻辑,显示"未授权"消息.

我想知道这是否是一个安全问题,我是否需要在代码中进行任何编码/过滤?

tbr*_*lle 15

此行为是由于useSuffixPatternMatch默认情况下的选项RequestMappingHandlerMapping(我假设您使用的是Spring MVC 3.1).

useSuffixPatternMatch: 在将模式与请求匹配时是否使用后缀模式匹配(".*").如果启用,映射到"/ users"的方法也匹配"/users.*".默认值是true".

要设置useSuffixPatternMatchfalse,最简单的方法是使用@Configuration:

@Configuration
@EnableWebMvc
public class Api extends WebMvcConfigurationSupport {

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

}
Run Code Online (Sandbox Code Playgroud)


Hei*_*kkä 7

在当前的 Spring Java 配置中,有一种稍微简单的方法来配置相同的东西:

@Configuration
public class DispatcherConfig extends WebMvcConfigurationSupport {

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

}
Run Code Online (Sandbox Code Playgroud)