spring-boot 1.3.0-BUILD-SNAPSHOT w/SpringSecurity プロジェクトがあり、REST エンドポイントのセキュリティが心配です。CORS フィルターが定義されています。
@Configuration
public class CorsConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping( "/**" ).allowedOrigins( "*" )
.allowedHeaders( "Access-Control-Allow-Origin", "*" ) "x-requested-with" )
.allowedHeaders("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedMethods("Access-Control-Allow-Headers", "Content-Type")
.maxAge( 3600);
}
};
}
}
そして、私はRESTコントローラーを持っています:
@Controller
@Transactional
public class Controller extends BaseController {
@Autowired
private QuestionService questionService;
@RequestMapping(value = "/questions", method = RequestMethod.GET)
@ResponseBody
public List<Question> getAllQuestions() {
return questionService.getAllAvailableQuestions();
}
...
}
しかし、OPTIONS 呼び出しでエンドポイントの 1 つをヒットすると、このエンドポイントが定義する GET 以外のことを許可するように見える結果が得られます。
Allow → GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Cache-Control → no-cache, no-store, max-age=0, must-revalidate
Content-Length → 0
Date → Wed, 28 Oct 2015 16:32:12 GMT
Expires → 0
Pragma → no-cache
Server → Apache-Coyote/1.1
X-CSRF-HEADER → X-CSRF-TOKEN
X-CSRF-PARAM → _csrf
X-CSRF-TOKEN → 83983056-f904-449e-a215-fe9f9492866b
X-Content-Type-Options → nosniff
X-Frame-Options → DENY
X-XSS-Protection → 1; mode=block
Spring MVC はデフォルトで OPTIONS 呼び出しを無視すると思っていました。Allow → GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
しかし、その呼び出しに対して GET のみを許可しているのに、なぜ返されているのか理解できないと思います。アプリケーション全体で、GET、PUT、POST、DELETE のみを許可するため、他の値が返される理由とその意味がわかりません。そして最も重要なことは、これはセキュリティ上の脆弱性ですか?