2011-12-26 2 views
0

Я хочу создавать сообщения только из внутреннего процесса с сервера, а затем исходящие на клиентов и из-за гибкости SignalR, я беспокоюсь, что XSS может легко отправить сообщение «myhub. addMessage "и отправить мусор, который я не хочу транслировать. Например, у меня есть 50 человек на странице, которые прослушивают сообщение от SignalR Hub. У них нет явного способа отправить сообщение через графический интерфейс, однако полузадача может легко взломать некоторый скрипт и начать отправлять сообщения, чтобы все могли видеть.Как получить широковещательное представление только для чтения в SignalR

Его вид, как чат, другими словами, но вы хотите, чтобы люди не отправляли сообщения. Вы только хотите, чтобы они услышали. Имеет смысл?

+1

Если вы взяли signalr из уравнения и только использовали запросы webservice, что бы вы сделали? – davidfowl

+0

@dfowler Вы создали это, и знаете, что вы можете использовать XSS для «addMessage», это неправильно или нет? Как вы мешаете кому-либо выполнять «addMessage» через JavaScript, просто создавая источник просмотра, захватывая его, локально добавляя базовый тег, а затем помещаете там какой-нибудь скрипт? Я надеялся, что в классе есть какой-то флаг C# или параметр, который сделает его доступным только для чтения. –

+1

Вы, вроде бы, проигнорировали мой вопрос. – davidfowl

ответ

2

Удалить метод AddMessage из концентратора.

Это действительно так.

Если вам по-прежнему нужна функциональность из Интернета, вам необходимо настроить какую-либо защиту для проверки. В SingalR еще нет встроенного устройства.

Если вам это нужно только извне Интернета (скажем, сервер только что публикует события), то вне методов хаба вы сделаете все возможное (см. «Трансляция через концентратор» со стороны концентратора в нижней части страницы: https://github.com/SignalR/SignalR/wiki/Hubs)

Другой вариант - проверить подлинность в начале любого действия. У вас есть доступ к файлам cookie. Но я не уверен в нормальной системе членства, поскольку я ее не использую. Поскольку у вас есть доступ к печенье, вот шаблон я использую для проверки подлинности:

public SomeHub : Hub 
{ 
    public void RandomAction() 
    { 
     if(!CheckCookie("Role Required")) 
     { 
      //In here we have what happens when there is 
      // a cookie that is associated with the right Role Required 
     } 
    } 
} 

Вы можете быть в состоянии использовать систему членства в CheckCookie, однако это может помочь:

string CookieName = "Website Authentication"; 
    string vReturn = null; 
    HttpCookie vCookie = null; 
    if(HttpContext.Current.Request.Cookies.AllKeys.Any(t => t == CookieName)) 
     vCookie = HttpContext.Current.Request.Cookies[CookieName]; 
    if(vCookie != null) 
     vReturn = FormsAuthentication.Decrypt(vCookie.Value).Name; 
    return vReturn; 

членского состава имя файла cookie не так, это просто наполнитель.

+0

Как это сделать в текущей структуре, поскольку я хочу использовать ее на других страницах для стандартного поведения? Пример кода очень поможет. Благодарю. –

+0

Ew, в этом случае вам нужно будет добавить код безопасности для подключения. Вы можете использовать куки для этого, но поскольку нет вызова «PreAction», вы застряли при вызове метода «Проверить» в начале каждого Действие.Если вы разрешаете людям попасть на рассматриваемую страницу после входа в систему ASP Membership, вы сможете использовать ее. – Rangoric

+0

Я увижу пример кода, когда вернусь домой. Я думаю, что у меня есть некоторые, но он не использует систему Memberhip Provider, но структура довольно универсальная. – Rangoric