SignalR 서버 허브는 그룹 목록을 보유하지 않으므로 그룹에 브로드 캐스트 메시지를 보내면 허브에 연결된 모든 사람에게 브로드 캐스트 메시지가 전송되고 클라이언트는 참여하는 그룹을 기반으로 메시지를 필터링한다고 가정합니다. 특정 그룹에 메시지를 보내면 모든 사람에게 메시지가 전송되고 브라우저 디버거 사용법을 알고있는 지정된 그룹에 속하지 않은 사람이 메시지를 가로 챌 수 있습니다. 보안 방송을 원한다면 (일부 클라이언트에게 유선을 통해 전송되지도 않음) 별도의 허브가 필요하거나 별도의 하위 도메인이 필요하다고 생각합니까?다른 발신자가 동일한 허브에서 SignalR 허브 메시지를 가로 채지 못하게 할 수 있습니까?
답변
별도의 허브는 좋은 생각처럼 들리지 않습니다. 격리 된 허브를 동적으로 생성 할 방법이 필요한 경우 권한이없는 사용자의 연결 및 거부 연결에 대해 사용자의 유효성을 검사 할 수 있습니다. 그러나이 기능이 충분하면 Authorize attribute을 사용하여 허브 또는 허브 방법을 보호 할 수 있습니다.
다른 사용자 그룹에 대해 동일한 기능을 복제해야하는 경우 SignalR 그룹을 사용할 수 있지만 연결할 때마다 사용자가 그룹에 속하는지 확인해야합니다. SignalR 문서에는이를 수행하는 방법에 대한 예제가 포함되어 있습니다. verification. 모든 사람이 그룹에 연결을 시도 할 수 있으며 연결시 유효성을 검사해야하며 특정 클라이언트에 대해 add 메소드를 호출하지 않아야한다는 사실에 의존하지 않아야합니다.
SignalR은 그룹의 클라이언트에게만 보냅니다. 그룹의 연결 목록을 검색 할 수없는 것은 설계상의 문제입니다. 그룹은 SignalR의 다른 모든 기능과 마찬가지로 가입 기반이므로 서버는 메시지를 수신해야하는 연결을 알고 있지만 내부에 깊이 묻혀 있습니다.
관련 서버 측 코드를 알려주지 만, 지금 당장이를 살펴볼 시간이 없습니다. 많은 코드가 아니기 때문에 클라이언트 측 코드에서 쉽게 볼 수 있습니다. 따라서 필터링이 없다는 것을 확인할 수 있습니다.
그룹도 허브별로 구분되어 있지 않습니다.
귀하가 주장하는 내용을 입증 할 수있는 링크를 제공 할 수 있습니까? –
어 .. 샘플 프로젝트를 다운로드하고 2 명의 클라이언트를 연결하여 시도해보십시오. 이는 가장 빠른 확인 방법입니다. 그렇지 않으면 .. https://github.com/SignalR/SignalR –
괜찮 았어. 여기에 힌트가있다. https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet. SignalR.Core/Hubs/HubConnectionContext.cs (OthersInGroup에 대한 설명 참조) –
감사합니다. 나는 내 자신을 잘 설명하지 못해서 내 질문을 편집했다. 그룹의 구성원 자격을 검증하면 데이터가 실제로 전선을 통해 전송되는 것을 방지 할 수 있다고 생각하지 않습니다. 내가 하나의 그룹으로 방송하고 싶다면 안전하지 않은 것처럼 보입니다. 메서드의 Authorize 특성은 클라이언트가 메서드를 호출하지 못하도록하기 위해 작동하는 것으로 보이며 브로드 캐스트에는 영향을주지 않습니다. 허브에서 권한 부여를 사용한다는 것은 동일한 기능을 가진 여러 허브로 돌아 간다는 것을 의미합니다. –
나는 항상 그룹에 메시지가 그 그룹에 가입 한 클라이언트에게만 전송된다고 생각했다. 그렇지 않으면 관찬합니까? – Stilgar
나는 그것을 테스트하지는 않았지만 [문서] (http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#callfromoutsidehub)는 "서버는 웹 서버에 노드를 추가 할 때마다 SignalR이 유지 관리하는 모든 상태가 새 노드로 전파되어야하기 때문에 확장 성을 최대화하는 데 도움이됩니다. " 목록이 없으면 그룹 또는 그룹 구성원 목록을 유지 관리하지 않아도됩니다. 보안을 강화할 수 없다고 가정하면 클라이언트에서 수행 될 것입니다. –