1

我正在构建一个 WCF 服务,该服务在 netTcpBinding 上使用自定义用户名/密码验证并具有消息级安全性。我一直在研究 MaxReceivedMessageSize 设置,并且我有一个相当技术性的查询。我注意到,当您指定一个自定义用户名验证器时,它会在 WCF 的管道深处被调用(我想是在握手期间)。

如果我有一个相对较大的 1MB 的 MaxReceivedMessageSize,WCF 会离线读取整个消息然后进行身份验证,还是会先进行身份验证并以某种方式丢弃其余的消息?

我查询的原因是 DoS 攻击。我希望由于身份验证,该服务将不受大型消息 DoS 攻击的影响。

4

1 回答 1

0

我相信完整的消息已加载。消息首先由传输通道处理,该通道没有任何有关消息安全的信息。因此,通道使用选定的编码器读取整个消息并创建 Message 实例。该实例被传递给包括消息安全检查在内的进一步处理。唯一的例外是当您使用流传输模式时。在这种情况下,只有消息头会在接收通道中读取并放置到缓冲区中。

为了证明这一点,您还可以打开消息日志记录,它能够在传输级别和服务级别记录消息。传输级别是从传输接收到的消息,服务级别是在服务中接收到的消息(在所有安全处理之后)。所以消息已经在传输级别被读取。

于 2010-09-21T09:14:56.990 回答