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


问题内容

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

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

我触发了以下请求http://www.example.com/welcome,效果很好。

问题是

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

也有效!!!

另外,尽管脚本未通过授权,但是将重新显示带有脚本标记的应用程序的HTTP GET请求URL。

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

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


问题答案:

此行为是由于useSuffixPatternMatch默认情况下内部为true
的选项所致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;
    }

}