ASP.NET WebService拒绝远程访问

时间:2009-12-15 18:41:54

标签: asp.net web-services security localhost

我已经创建了一个使用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服务。

3 个答案:

答案 0 :(得分:1)

针对IP地址进行测试
Request.ServerVariables ["REMOTE_ADDR"]

答案 1 :(得分:1)

IIS允许您在其配置中列出白/黑列表IP组。使用它将其锁定到localhost。您还可以配置防火墙,以防止任何人从外部命中该端口。

答案 2 :(得分:1)

我有点困惑。

这是否会被浏览器调用?如果是,那么你应该允许远程访问。