【问题标题】:How does SockJS create an iframeSockJS 如何创建 iframe
【发布时间】:2018-09-22 13:51:28
【问题描述】:

我在我的网站上使用 SockJS,我正在使用端点 /msg

当我转到 mysitename.com/msg/iframe.html 时,它显示了这个页面:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <script>
    document.domain = document.domain;
    _sockjs_onload = function(){SockJS.bootstrap_iframe();};
  </script>
  <script src="https://cdn.jsdelivr.net/sockjs/1.0.0/sockjs.min.js"></script>
</head>
<body>
  <h2>Don't panic!</h2>
  <p>This is a SockJS hidden iframe. It's used for cross domain magic.</p>
</body>
</html>

SockJS 是如何做到这一点的?

【问题讨论】:

  • 关于这个问题的任何更新?这是一次安全攻击,我想防止这种情况发生吗?

标签: javascript sockjs


【解决方案1】:

它位于后端 spring websocket 的 org.springframework.web.socket.sockjs.support.AbstractSockJsService 中。

例如:

public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

private static final String SOCKJS_VERSION = "https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.3.0/sockjs.min.js";

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableSimpleBroker("/topic");
    config.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/handler").setAllowedOrigins("*");
    registry
        .addEndpoint("/handler")
        .setAllowedOrigins("*")
        .withSockJS()
        .setClientLibraryUrl(SOCKJS_VERSION);
}

}

如果您关注 setClientLibraryUrl,您将看到它正在制定的位置。

查看https://github.com/spring-projects/spring-framework/blob/master/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java

然后搜索“IFRAME_CONTENT”

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2017-05-03
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多