背景
在对子公司送检的APP渗透测试中,经过反编译后,发现APP在连接websocket服务器接收消息时使用用户名,密码的形式进行认证。并且将明文的用户名,密码信息写在APP代码中。如下图所示
修复建议
ws协议认证建议通过生成token的机制验证,如:
@EnableWebSocketMessageBroker public class WSContraller extends AbstractWebSocketMessageBrokerConfigurer{ @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/endPoint").addInterceptors( new HandshakeInterceptor(){ @Override public void afterHandshake(ServerHttpRequest request,ServerHttpResponse response, WebSocketHandler handler,Exception e) {} @Override public boolean beforeHandshake(ServerHttpRequest request,ServerHttpResponse response, WebSocketHandler handler, Map<String, Object> map) throws Exception { ServletServerHttpRequest req = (ServletServerHttpRequest) request; String token = req.getServletRequest().getParameter("token"); //检查token是否正确 boolean isPass = CommonUtil.checkToken(token); if(isPass){ //业务操作 //...... } return false; }} ).setHandshakeHandler( new DefaultHandshakeHandler(){ @Override protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map<String, Object> attributes) { //设置认证用户 return (Principal)attributes.get("user"); } } ).setAllowedOrigins("*").withSockJS(); } }
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。