2011-12-26 56 views
0

我只想從服務器的內部進程發起消息,然後向客戶端發送消息,並且由於SignalR的靈活性,我擔心XSS可以輕鬆發送消息「myhub」。 addMessage「併發送垃圾,我不想播放。例如,我在一個頁面上有50個人在收聽來自SignalR Hub的消息。他們沒有明確的方式通過圖形用戶界面發送消息,但是,半智能可以輕鬆地將一些腳本混合在一起,並開始發送消息供所有人查看。如何在SignalR中擁有隻讀廣播視圖

有點像聊天室換句話說,但你想阻止人們發送消息。你只希望他們聽到。說得通?

+1

如果您將signalr排除在等式之外,並且只使用webservice調用,您會做什麼? – davidfowl 2011-12-28 13:30:23

+0

@dfowler你創建了這個,你知道你可以做XSS的「addMessage」是不是正確的或不是?你如何通過簡單地做一個視圖源,抓住它,在本地放置一個基本標記,然後在其中放置一些腳本,來阻止某人通過JavaScript執行「addMessage」?我希望有一些C#標誌或設置在類上,使它只能讀取。 – 2011-12-28 15:28:39

+1

你有點不理我的問題。 – davidfowl 2011-12-28 16:24:02

回答

2

從Hub中刪除AddMessage方法。

就是這樣。

如果您仍然需要網絡功能,那麼您需要設置某種安全措施來檢查。 SingalR還沒有內置此功能。

或者,如果您只需要從網絡外部(例如服務器只發布事件),那麼集線器方法的外部就會很好(請參閱從頁面底部的集線器外部通過集線器進行集線器廣播: https://github.com/SignalR/SignalR/wiki/Hubs

另一種選擇是在任何給定操作開始時檢查身份驗證。你有權訪問cookies。但我不確定會員系統是否正常,因爲我沒有使用它。既然你有機會獲得餅乾,這裏是我使用的身份驗證模式:

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; 

成員餅乾名稱不是這樣,它只是一個填充物。

+0

我如何在當前框架上做到這一點,因爲我還想在其他頁面上使用標準行爲?代碼示例會大大幫助。謝謝。 – 2011-12-28 21:42:37

+0

Ew,在這種情況下,您將需要添加一些安全代碼來掛鉤。您可以使用cookie來實現此目的,但由於沒有「PreAction」調用,因此您在每次啓動時都會調用「驗證」方法行動。如果您只允許用戶在使用ASP Membership系統登錄後訪問相關頁面,則應該可以使用該功能。 – Rangoric 2011-12-28 21:46:32

+0

我回家後會看到關於示例代碼的內容。我想我有一些,但它不使用會員供應商系統,但結構非常通用。 – Rangoric 2011-12-28 21:47:34