【问题标题】:Why does maxConcurrentSessions default to such a low value? And what is a safe value?为什么 maxConcurrentSessions 默认值这么低?什么是安全值?
【发布时间】:2009-11-24 08:53:04
【问题描述】:

在 WCF 中,maxConcurrentSessions 默认为 10,因此限制服务器与其打开的 TCP 连接数超过 10。

为什么会这样?

对于具有“少数”(或两个)客户端但由于向客户端发送事件而需要为每个客户端保持打开的 netTcpBinding 的服务器,将其设置为非常高的值对我来说是否安全?

【问题讨论】:

    标签: .net wcf nettcpbinding


    【解决方案1】:

    我假设您的实例模式是 Per Session。如果需要,您可以将此值设置为 Int32.Max。但是,最好详细了解 WCF 限制概念。

    该值非常低以防止 DOS 攻击,因为 WCF 团队希望服务“默认安全”。

    这是一篇好书,看看this blog post here

    请注意,这些值非常 低……比很多人低很多 希望他们成为。的思考 这里的 WCF 团队是他们想要的 WCF“默认安全”和 减少 DOS 攻击的变化 从针对您的服务启动。 这个想法听起来不错,但在 实践它会导致重大问题。

    在 事实上,你几乎肯定跑过 如果您使用的是 像 WsHttpBinding 这样的绑定 支持会话。这是为什么?这 默认会话数为 10,这 起初似乎意味着 10 个用户 可以同时访问您的服务 时间。但是,WCF 会话不是 网络会话。与网络会话不同, 由服务器管理和 通常使用 http cookie 进行跟踪, WCF 会话由 客户端代理,直到他们结束 超时或客户端发送一个 明确要求放弃 会议。事情是这样的,因为每个 代理实例启动它自己的 会话,一个做几个的用户 一次请求可能是 一次使用多个会话。现在 你可能会认为你是安全的,如果 你没有多线程代码 做这种事情......但是 这并不完全正确。因为 用户必须明确请求 服务器取消他的会话,这是 你可能会离开会议 不小心打开。去过的人 经常使用 ASMX 服务 没有意识到他们需要关闭 他们的代理对象,以及少数 确实意识到这些对象需要 关门常犯的错误 将它们视为一次性物品, 这导致会话被留下 打开。请记住,默认值 会话限制为 10,这意味着 如果您对服务进行十次调用 在一个相对的使用 WsHttpBinding 很短的时间,你可以结束 锁定您的服务,直到 会话过期。

    决定 在这里制作的 WCF 团队可能会令人困惑。 试图限制能力 攻击者发起 DOS 攻击 反对你的服务,他们做到了 更容易执行 DOS 攻击 反对你的服务。你不再 需要资源来淹没服务器 带有请求,使其无法再 回应,你只需要做一个 少数没有明确的电话 请求关闭连接并 最大化会话数。除非设置 这个值非常高,你运行 服务器拒绝的风险 接受任何传入的连接, 尽管它令人不寒而栗 CPU 使用率为零。

    【讨论】:

      【解决方案2】:

      您可以将这个设置得更高 - 只要您的服务器有资源来处理请求。它默认为 10,因为这将轻松击败对您的服务的任何拒绝服务攻击。如果你有一个强大的服务器专门用于这个单一的服务,如果你愿意,你可以将它设置为 10,000。没有一个神奇的数字可以用于此 - 您需要平衡一方面的需求和另一方面的服务器资源,并发会话的最大数量有助于防止崩溃!

      【讨论】:

      • 在建立 10 个连接后拒绝使用您的服务是一种有趣的击败拒绝服务攻击的方法...... Otoh,这对环境有好处,因为服务器 CPU 将保持相当平静。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 2018-06-22
      • 1970-01-01
      相关资源
      最近更新 更多