【问题标题】:How to have a read-only broadcast view in SignalR如何在 SignalR 中拥有只读广播视图
【发布时间】:2012-01-03 07:13:39
【问题描述】:

我只想从服务器的内部进程发送消息,然后发送到客户端,并且由于 SignalR 的灵活性,我担心 XSS 可以轻松发送消息“myhub.addMessage”并发送我不知道的垃圾想播出。例如,我有 50 个人在一个页面上侦听来自 SignalR Hub 的消息。他们没有明确的方式通过 GUI 发送消息,但是,一个笨手笨脚的人可以轻松地破解一些脚本并开始发送消息以供所有人查看。

换句话说,这有点像拥有一个聊天室,但您想阻止人们发送消息。你只希望他们听到。说得通?

【问题讨论】:

  • 如果你把 signalr 排除在外,只使用 web 服务调用,你会怎么做?
  • @dfowler 你创建了这个并且你知道你可以对“addMessage”进行 XSS 是不是正确或不正确?你如何通过简单地做一个视图源,抓住它,在本地放置一个基本标签,然后把一些脚本放在那里来防止某人通过 JavaScript 做“addMessage”?我希望类上有一些 c# 标志或设置使其只读。
  • 你有点忽略了我的问题。
  • 不想忽视你@dfowler。我高度评价你的努力。您的问题实际上是在说“以自己的方式做事”。是的,我可以,但重点是使用一个很好的框架来进行广播,但不允许发布聊天。基本上你的解决方案有一半允许实时更新,但只是禁止人们进行 XSS 的能力。如果这是您的最终答案,我将查看您在 Git 上的来源。不用担心。
  • 实现某种安全性,将令牌传递给服务器,如果可能的话,命令也可以工作。

标签: c# asp.net signalr


【解决方案1】:

从 Hub 中删除 AddMessage 方法。

原来如此。

如果您仍需要网络上的功能,则需要设置某种安全措施来进行检查。 SingalR 尚未内置此功能。

或者,如果您只需要从网络外部(例如服务器只是发布事件),那么集线器的外部方法就可以了(请参阅页面底部的从集线器外部通过集线器广播:@ 987654321@)

另一个选项是在任何给定操作开始时检查身份验证。您确实可以访问 cookie。但我不确定正常的会员系统,因为我不使用它。由于您可以访问 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名称不是那个,它只是一个填充物。

【讨论】:

  • 如何在当前框架上执行此操作,因为我还想在其他页面上使用它来实现标准行为?代码示例将有很大帮助。谢谢。
  • Ew,在这种情况下,您将需要添加一些安全代码来挂钩。您可以为此使用 cookie,但由于没有“PreAction”调用,因此您无法调用“Validate” " 每个动作开始时的方法。如果您只允许人们在使用 ASP 会员系统登录后访问相关页面,您应该可以使用它。
  • 我回家后会看到示例代码。我想我有一些,但它不使用 Membership Provider 系统,但结构非常通用。
  • 我给你一个尝试的点,因为我认为当前的设置不可能做到这一点。
  • 不容易。您可以访问 cookie,因此您可以检查它们。让我添加一些可能有帮助的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2016-10-25
相关资源
最近更新 更多