我已经创建了一个使用ASP.NET Ajax消费的ASP.NET WebService。 WebService位于同一个框和相同的Web应用程序上,因此我不希望允许远程访问此Web服务,但只允许它响应来自localhost的请求。
Web.Config没有配置部分,因此没有启用httpPost和httpGet。这可以。但是,如果我从远程计算机直接导航到WebService URL,它仍会加载并显示方法列表。单击该方法会给我一条消息,指出测试表单不可用于远程计算机(按预期),但它列出了有关如何发出Soap请求和处理Soap响应的信息。
此外,我相信我被一个只是一个好奇的用户的机器人刮掉了,因为我现在在我的日志中收到错误消息,例如...
System.InvalidOperationException: Request format is unrecognized for URL
unexpectedly ending in '/ValidateUsername'.
如果您尝试远程对服务发出GET请求(通过操作查询字符串),则会发生这种情况。我很高兴它没有处理请求,因为我不希望远程用户访问此服务,但我希望它不会抛出错误。
如何锁定Web服务以使其不可用于远程计算机,但仍可作为ASP.NET Ajax消耗的ScriptService对本地计算机可用?
更新: 好的,这是可行的例子。
网站:http://so.weirdwes.dyndns.org/default.aspx
WebService:http://so.weirdwes.dyndns.org/services/services.asmx
Web.Config中:
<webServices>
<protocols>
<remove name="HttpGet"/>
<remove name="HttpPost"/>
</protocols>
</webServices>
网站使用ScriptManager标记和ScriptReference消耗WebService。您将注意到,如果单击该按钮,则会调用Web服务并且一切正常,即使Post和Get已被删除。这很好,因为这是我们希望它的工作方式。这个问题是...... http://so.weirdwes.dyndns.org/services/services.asmx/GetRemoteAddr
Server Error in '/' Application.
--------------------------------------------------------------------------------
Request format is unrecognized for URL unexpectedly ending in '/GetRemoteAddr'.
机器人或其他东西正在抓取此URL,并且它会产生我们收到通知的错误。我想压制这个错误或完全阻止它。如果我改变Web.Config并重新添加Get和Post协议,则此错误消失 - 但随后它允许使用我们不想要的Get远程访问Web服务。
答案 0 :(得分:1)
针对IP地址进行测试
Request.ServerVariables ["REMOTE_ADDR"]
答案 1 :(得分:1)
IIS允许您在其配置中列出白/黑列表IP组。使用它将其锁定到localhost。您还可以配置防火墙,以防止任何人从外部命中该端口。
答案 2 :(得分:1)
我有点困惑。
这是否会被浏览器调用?如果是,那么你应该允许远程访问。