代码之家  ›  专栏  ›  技术社区  ›  Gerhard Wessels

如何防止WCF服务配置文件中的安全覆盖?

  •  0
  • Gerhard Wessels  · 技术社区  · 16 年前

    我必须创建一个将敏感信息返回给客户端的WCF服务。我需要确保服务的安全性不会轻易受到损害。我将使用wcf的内置安全机制,通过使用具有证书安全性的wshttpbinding来保护网络上的数据。

    但是,我还希望通过修改配置文件来确保服务的安全性不会受到损害。我希望保留配置文件在端口、基地址等方面提供的所有灵活性,但忽略任何可能危及服务的与端点/绑定相关的配置部分。

    我想做的是:创建一个自定义服务主机,在该主机中我覆盖applyconfiguration函数。在applyconfiguration函数中,我可以做两件事之一:

    1. 只加载配置文件中我需要的base.loadconfigurationSection部分。
    2. 使用base.applyconfiguration加载整个配置文件,并删除可能危及安全性的所有端点。

    我对WCF不熟悉,因此对于如何正确地进行这项工作的任何指导都会很感激(如果可以的话,请提供代码示例):-)。我不知道我是否在正确的轨道上!

    1 回复  |  直到 13 年前
        1
  •  1
  •   marc_s MisterSmith    16 年前

    嗯,你有多种选择:

    • 您可以检查自定义服务主机中的某些安全设置,并确保它们已被激活。
    • 如果它们没有被激活,您可以关闭服务主机,或者在代码中设置它们(覆盖配置文件中设置的任何内容)。

    您还可以使用ProtectionLevel设置在服务合同中要求某些安全设置:

    [ServiceContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
    interface IYourService
    {
    ....
    }
    

    这实际上是默认设置——所以您应该是安全的,但是如果您想这样做,您可以始终明确地指定保护级别(以使您的意图清晰明了)。

    这样,任何试图向您发送未加密或未签名消息的人都将被直接拒绝。

    马克