【问题标题】:Is it possible to configure a location in Web.config to only allow local connections是否可以将 Web.config 中的位置配置为仅允许本地连接
【发布时间】:2011-01-21 05:23:22
【问题描述】:

我在 ASP.Net 应用程序中有一个页面(实际上它的 Mvc 但并不重要),我希望只允许从本地计算机连接到该页面。我很想在 Web.config 中做这样的事情:

<location path="resources">
  <system.web>
    <authorization>
      <allow ips="local"/>
    </authorization>
  </system.web>
</location>  

我知道这可以通过简单检查后面的页面代码(或控制器)和its even possible just with IIS configuration 来实现,但我喜欢 Web.config 配置,因为在我看来这将是最优雅的解决方案。有人知道这是否可能吗?

【问题讨论】:

  • 您的用户是否在 Windows 域中?如果是这样,您可以将访问限制为仅域用户。它看起来很像@lance 的答案。
  • 注意:这是不可能的,所有解决方案都需要编写代码(没有现成的解决方案)

标签: asp.net web-config


【解决方案1】:

您可以要求 IIS 通过 IP 地址从 Web.config 中限制对资源的访问:

<location path="resources">
  <system.webServer>
    <security>
      <ipSecurity allowUnlisted="false">
        <clear/>
        <add ipAddress="127.0.0.1"/>
      </ipSecurity>
    </security>
  </system.webServer>
</location>

More info

编辑:正如 Mike 在下面的评论中指出的那样,这需要安装 IP 和域限制模块。谢谢迈克!

【讨论】:

  • 感谢您的回答。首先,这对我不起作用 - 该设置似乎被 IIS 忽略了。我终于发现在 Windows 7 上,默认情况下不安装 IP 和域限制模块。为了让它工作,我必须对Control Panel &gt; Programs and Features &gt; Turn Windows features on or off &gt; Internet Information Services &gt; World Wide Web Services &gt; SecurityIP Security 打勾。
  • 这看起来效果很好,但是你知道如何改变页面的输出吗?我收到 200 状态码,页面显示:“不允许远程访问 (2)。”
  • @Redtopia:可以添加403错误页面。在 Web.config 中,您需要:
  • 谢谢...原来我使用的是 BonCode 适配器,它被设置为防止远程连接,它正在输出错误。
  • 附加说明,如果您有一个需要对所有页面进行身份验证的站点,并且此 localhost 页面不需要身份验证,则需要在 location 元素中添加它...
【解决方案2】:

如果您想指定 IP 地址范围,我发现这也很有帮助。您可以将以下代码块添加到您的 web.config

<system.webServer>
    <security>
        <ipSecurity allowUnlisted="false">
            <clear/>
            <add ipAddress="95.110.115.0" subnetMask="255.255.255.0"/>  
            <!--blocks range 95.110.115.0 to 95.110.115.255-->    
            <add ipAddress="95.110.0.0" subnetMask="255.255.0.0"/>      
            <!--blocks range 95.110.0.0 to 95.110.255.255-->    
            <add ipAddress="95.0.0.0" subnetMask="255.0.0.0"/>          
            <!--blocks range 95.0.0.0 to 95.255.255.255-->  
        </ipSecurity>
    </security>
</system.webServer>

【讨论】:

    【解决方案3】:
    1. 为机器发明一个非 DNS 别名,即“PrivateHostName”。
    2. 在本地主机文件中将此值设置为指向 127.0.0.1。
    3. 为网站设置一个 (IIS) 主机标头,使其仅响应对地址“PrivateHostName”的请求。
    4. 对于所有本地调用,请使用私有主机名。

    远程客户端将无法解析主机名。

    您可以使用绑定到虚拟网络适配器的专用 IP 地址来保护它,该虚拟网络适配器实际上不会响应外部请求。

    【讨论】:

    • 不安全的解决方案。黑客可以将此别名添加到他的本地主机文件并访问该网站。
    【解决方案4】:

    您可以创建自己的配置部分,作为 web.config 的一部分,然后使用该设置来控制 global.asax Session_Start 中的行为。

    【讨论】:

      【解决方案5】:

      这不是您要求的,但您可以指定本地计算机的用户。我无法想象这是实用的,除非您要授权的用户数量很少。

      <location path="resources">
        <system.web>
          <authorization>
            <allow users="LOCALMACHINENAME\UsernameOfTrustedUser"/>
            <deny users="*"/>
          </authorization>
        </system.web>
      </location>
      

      【讨论】:

      • 嗨 Lance,这无济于事,因为它的 IIS 用户将定期运行此页面,而且我目前不是“模拟”,所以所有用户都是 IIS 用户。
      • 你试过这个建议了吗?它应该工作。 “Impersonation”的使用与此处的身份验证示例无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 2011-03-06
      相关资源
      最近更新 更多