0

サーバーからの内部プロセスからのみメッセージを発信し、クライアントに発信したいのですが、SignalR の柔軟性のために、XSS がメッセージ "myhub.addMessage" を簡単に送信し、ブロードキャストしたくないガベージを送信できるのではないかと心配しています。たとえば、SignalR Hub からのメッセージをリッスンしているページに 50 人がいるとします。GUI を介してメッセージを送信する明示的な方法はありませんが、頭の悪い人が簡単にいくつかのスクリプトをハックして、全員が見られるようにメッセージを送信し始めることができます。

言い換えれば、チャットルームを持つようなものですが、人々がメッセージを送信するのを防ぎたい. あなたは彼らに聞いてもらいたいだけです。理にかなっていますか?

4

1 に答える 1

2

ハブから AddMessage メソッドを削除します。

それは本当にそれです。

それでも Web からの機能が必要な場合は、チェックするために何らかのセキュリティを設定する必要があります。SingalR にはまだこれが組み込まれていません。

または、Web の外部からのみ必要な場合 (サーバーがイベントを発行するだけなど) は、ハブの外部メソッドで問題ありません (ページの下部にあるハブの外部からのハブ経由のブロードキャストを参照してください: 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 の名前はそうではなく、単なるフィラーです。

于 2011-12-28T20:34:44.327 に答える