2014-04-07 16 views
10

Jestem nowy w SignalR, ale byłem ciekawy, jak bezpieczne.SignalR Security

Na przykład utworzyć następującą metodę, aby wysłać wiadomość do wszystkich użytkowników tak:

public class NotificationHub : Hub 
{ 
    public void Send(string message) 
    { 
     Clients.All.broadcastMessage(message); 
    } 
} 

SignalR generuje następujący sposób w pliku js (piasty)

proxies.notificationHub.server = { 
    send: function (message) { 
     return proxies.notificationHub.invoke.apply(proxies.notificationHub, $.merge(["Send"], $.makeArray(arguments))); 
    } 
}; 

So , czy żaden użytkownik na świecie nie może skopiować i wkleić tego do swojej konsoli i wysłać wiadomość, którą wybrałaby wszystkim moim użytkownikom, bez mojej zgody?

var notifications = $.connection.notificationHub; 
notifications.server.send("Your site has been hacked!"); 

Po prostu wypróbowałem to i to działa - więc w jaki sposób mogę uniemożliwić moim użytkownikom wysyłanie nieautoryzowanych wiadomości ze strony klienta?

+1

Podejrzewam bezpieczeństwo ma odpowiedź kanoniczną dla SignIR, więc wierzę, jednostronne blisko Andrzeja był błędny. –

+0

@Andrew Barber Proszę o jedną odpowiedź na moje proste pytanie - w jaki sposób uniemożliwić użytkownikom nadużywanie aplikacji w ten sposób. Myślę, że to całkiem prosty scenariusz pytań i odpowiedzi ... – user1477388

+0

Myślę, że odpowiedź byłaby jednak zbyt szeroka. Wydaje się, że jest to coś odpowiedniego dla samouczka./cc @kirkwoll –

Odpowiedz

11

To punkt końcowy HTTP, jak każdy inny. Jeśli chcesz ograniczyć dostęp do niego, musisz uwierzytelnić użytkowników i autoryzować ich działania. Uwierzytelniasz za pomocą standardowych metod uwierzytelniania internetowego (formula: auth, cookies, Windows auth, itp.) I możesz autoryzować w kodzie przy użyciu SignalR konstruktów (takich jak wskazany atrybut Authorize) lub z własnym kodem.

To wszystko jest udokumentowane: http://www.asp.net/signalr/overview/signalr-20/security/introduction-to-security

+0

Rozumiem, więc najlepszą odpowiedzią na moje pytanie wydaje się być użycie standardowych atrybutów uwierzytelniania ASP.NET. Dzięki temu mogę określić, którzy użytkownicy mają dostęp do wybranych metod. Dziękuję za radę. – user1477388