代码之家  ›  专栏  ›  技术社区  ›  WesleyJohnson

ASP.NET Web服务拒绝远程访问

  •  0
  • WesleyJohnson  · 技术社区  · 15 年前

    我创建了一个使用ASP.NET AJAX的ASP.NET Web服务。WebService位于要使用它的同一个框和同一个Web应用程序上,因此我不希望允许远程访问此WebService,但只让它响应来自本地主机的请求。

    web.config没有配置节,因此前面没有打开httppost和httpget。这很好。但是,如果我从远程机器直接导航到WebServiceURL,它仍然会加载并向我显示方法列表。单击该方法确实会给我一条消息,说明远程计算机无法使用测试表单(如预期的那样),但它列出了有关如何发出SOAP请求和处理SOAP响应的信息。

    另外,我相信我正被一个只不过是好奇用户的机器人抓走,因为我现在在我的日志中收到了错误消息,比如…

    System.InvalidOperationException: Request format is unrecognized for URL
    unexpectedly ending in '/ValidateUsername'.
    

    如果您试图对服务远程发出GET请求(通过操纵查询字符串),就会发生这种情况。我很高兴它没有处理请求,因为我不希望远程用户访问此服务,但我希望它不会抛出错误。

    如何锁定WebService,使其不可用于远程计算机,但仍可用作ASP.NET AJAX可使用的脚本服务?

    更新: 好吧,这是一个可行的例子。

    网站: 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 回复  |  直到 15 年前
        1
  •  1
  •   ps.    15 年前

    我有点困惑。

    浏览器会调用这个吗?如果会,那么您应该允许远程访问。

        2
  •  1
  •   RHicke    15 年前

    测试IP地址
    Request.ServerVariables ["REMOTE_ADDR"]

        3
  •  1
  •   Steven Sudit    15 年前

    IIS允许您在其配置中白名单/黑名单IP组。使用它将其锁定到本地主机。您还可以配置防火墙以防止任何人从外部访问该端口。