【发布时间】:2017-04-13 05:24:06
【问题描述】:
我有一个 Spring MVC 应用程序,它通过 HTTP POST 方法从另一个应用程序接收 URL 回调,该方法还将发送 SNI(用于 SSL/TLS 连接的(服务器名称指示)),所以我必须实现一个面向 Web 的 RESTful我的 Spring 应用程序中的服务。 由于我将始终从同一服务器接收 URL 回调,因此我想拒绝来自其他服务器的所有请求。在哪里更好地检查服务器名称?在 Spring MVC 应用程序级别,或者有一种方法可以配置 Apache Web 服务器??
我有一个接受 POST 请求的 @Controller 端点,像这样 http://myserver/MyApp/api/registerUser?userId=E506&lat=41&lng=7&rssi=-127&data=3428102231
但此请求将始终来自服务器 111.222.333.444,因此我只想接受来自该服务器的请求,而不是其他任何人(假设是潜在的黑客)
【问题讨论】:
-
不确定我是否完全关注...您有一个通过 SSL/TLS 在 Apache 上运行的 Spring 应用程序。你有一个
@Controller端点,它接受一个 POST 请求,这样请求的主体包含用于回调的 URL(例如 webhook)。您是说到您的控制器端点的入站请求将始终来自服务器 X,还是您希望所有回调 url 都具有服务器 X 的目的地?无论哪种情况,我都不确定 SNI 是否是解决方案,但一旦知道答案,或许能够提供更好的建议 -
@CrossOrigin(origins = "http://111.222.333.444")有用吗?它可能只允许服务器 111.222.333.444 向您的注释端点发送请求。 -
Origin header
is added by the user agent to describe the security contexts that caused the user agent to initiate an HTTP request. HTTP servers can use the Origin header to mitigate against Cross-Site Request Forgery (CSRF) vulnerabilities.@CrossOrigin 不适用于 OP 场景。我认为,最好控制来自网关 http 服务器(在本例中为 apache)的访问。
标签: apache rest spring-mvc ssl ssl-certificate