ASP.net - Web服务 - 仅在本地主机
问题描述:
我对暴露在站点文件夹内的一组web服务的现场工作访问:ASP.net - Web服务 - 仅在本地主机
services
--- servicea.asmx
--- serviceb.asmx
这些服务设置为允许一些互操作性我们控制的其他网站,并且这些网站都位于同一台服务器上。
该网站使用基于asp.net表单的身份验证,但services文件夹已被豁免,并且每个服务在调用方法时执行它自己的身份验证,并检查他是否仅从本地地址访问,精细。
但是,如果我从外部地址访问services/servicea.asmx,我仍然可以看到可用方法的列表。我无法有效地从外部地址调用任何这些方法,这是应该的,但我不喜欢这样暴露我们的内部API。有什么方法可以阻止asmx文件在方框列表中访问时访问方法列表吗?
答
您应该能够添加以下到你的web.config:
<system.web.services>
<protocols>
<remove name="Documentation"/>
</protocols>
</system.web.services>
本应隐藏服务描述页面。
有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/b2c0ew36%28v=vs.100%29.aspx - 请注意,这也会阻止客户端生成WSDL代理类,因此它可能成为实现简便的真正障碍。
隐藏方法名称不能代替安全性,但您可能需要考虑是否需要执行此操作。
您是否知道是否有办法在每个服务级别上执行此操作 - 我们还有一些其他应可从外部访问的项目。 – Paddy 2012-03-16 10:56:13
一个想法是尝试使用位置元素:http://msdn.microsoft.com/en-us/library/b6x6shw7%28v=vs.100%29.aspx - 您可以尝试将上面的块嵌套在元素,但我找不到任何文档中的参考,说这将工作 - 对不起。否则,您必须将每个虚拟目录放入其自己的虚拟目录或类似目录中,以便将它们有效地彼此隔离。 – dash 2012-03-16 11:41:08