【问题标题】:Spring Websocket Security: How to prevent SEND request directly to the brokerSpring Websocket Security:如何防止直接向代理发送请求
【发布时间】:2023-03-29 21:10:01
【问题描述】:

Spring Websocket 允许客户端(即浏览器)直接将消息发送到任何代理支持的目的地,即允许绕过服务器端应用程序的直接客户端到客户端通信。在现实世界中,我认为直接向您的消息代理公开公开写访问权限是不可接受的。出于安全和消息完整性的原因,您通常希望只允许服务器应用程序通过代理向客户端发送任何消息。但我找不到任何关于如何实现这一目标的信息。默认行为是浏览器对代理目标具有不受限制的读写直接访问权限。

【问题讨论】:

    标签: spring websocket spring-websocket


    【解决方案1】:

    这在技术上是不正确的,客户端和代理之间没有直接通信,所有消息都通过您的应用程序,无论目标类型如何。代理目标消息被转发到代理,这意味着您可以在它们到达代理之前随时拦截它们。 Spring Security 4.0.0.RC1 支持 WebSocket 安全性,因此您可以对消息应用授权:

    public class WebSocketSecurityConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer {
        protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
          messages
            .antMatchers(SimpMessageType.MESSAGE, "/topic/**").denyAll()
            .antMatchers("/**").hasRole("ADMIN");
      } 
    }
    

    在上面的 sn-p 中,将消息发送到任何/topic 目标都会被拒绝,并且对其他目标的任何其他操作都需要角色 ADMIN。如果这对您来说还不够,您可以随时实现自己的ChannelInterceptor 来拦截消息并将其添加到clientInboundChannel

    【讨论】:

    • 谢谢。新的 spring-security 支持看起来很棒。我知道从技术上讲,所有通信都作为某种代理通过应用程序进行,但我不知道该框架允许您编写自己的拦截器。我将进一步了解 ChannelInterceptor。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2018-04-26
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多