WCF netTcpBinding MaxReceivedMessageSize和Custom UsernamePasswordValidation

时间:2010-09-21 06:47:51

标签: wcf wcf-security denial-of-service

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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