如何防止来自web.config中某些域的请求?

时间:2015-05-30 22:43:02

标签: asp.net-mvc web-config

我想在web.config中为我的应用程序限制一个域。我该怎么做?我刚刚找到了IIS设置的解决方案,比如

<add ipAddress="some_ip_address" />

但我想限制域名,而不是IP地址

3 个答案:

答案 0 :(得分:2)

没有直接的方法可以不允许特定的域名。您只能限制某些IP。             您始终可以使用nsloopkup将域映射到其IP地址。

       <security>
           <ipSecurity allowUnlisted="true">    
           <clear/>     <!-- removes all upstream restrictions -->                
           <add ipAddress="83.116.19.53"/>                
           </ipSecurity>
      </security>

答案 1 :(得分:0)

在IIS管理器中:

  1. 选择所需的网站。
  2. 在“主页”窗格中,打开“IP地址和域限制”。
  3. 在“操作”窗格中,启动“编辑功能设置...”
  4. 选中启用域名限制
  5. 复选框
  6. 单击[确定]退出。
  7. 您现在可以像添加IP地址一样添加域名。

    注意:这不能通过web.config完成。这些设置存储在ApplicationHost.config中。您必须才能访问IIS管理器以启用IP和域安全性。没有办法解决这个问题。

    <ipSecurity enableReverseDns="true">
        <add ipAddress="192.168.0.1" allowed="false" />
        <add domainName="google.com" allowed="false" />
    </ipSecurity>
    

答案 2 :(得分:0)

web.config中没有直接设置来执行此操作。但是,您可以在web.config中创建自定义集合以列出域,并编写自定义请求处理程序或将阻止特定域的自定义操作过滤器。 然而这很容易被欺骗或绕过。这是一个例子:

您的configsection类:

    public class DisallowedDomainsSection : ConfigurationSection
    {
        // Create a "remoteOnly" attribute.
        [ConfigurationProperty("remoteOnly", DefaultValue = "false", IsRequired = false)]
        public Boolean RemoteOnly
        {
            get
            { 
                return (Boolean)this["remoteOnly"]; 
            }
            set
            { 
                this["remoteOnly"] = value; 
            }
        }

        // Create a "domain" element.
        [ConfigurationProperty("domainName")]
        public DomainElement Domain
        {
            get
            { 
                return (DomainElement)this["domainName"]; }
            set
            { this["domainName"] = value; }
        }
    }

然后在configSections节点中声明您的配置部分:

<configSections>
    <sectionGroup name="disAllowDomainsGroup">
      <section 
        name="disallowDomains" 
        type="your.class.definition" 
        allowLocation="true" 
        allowDefinition="Everywhere"
      />
    </sectionGroup>
  </configSections>

然后你宣布行动部分:

<configuration>
  <!-- Configuration section settings area. -->
  <disallowDomainsGroup>
    <disallowDomain remoteOnly="true">
      <domainName="www.google.com" />
    </dissallowDomain>
  </disallowDomainsGroup>
</configuration>

最后,您创建一个ActionFilterAttribute以获取不允许的域列表,并在用户来自域时重定向/限制用户。

您可以像这样访问新创建的webconfig部分:

DomainsDisallowedSection config =
        (DomainsDisallowedSection)System.Configuration.ConfigurationManager.GetSection(
        "disallowDomainsGroup/disallowDomains");

然后遍历您的不允许的域并使用

HttpContext.Current.Request.Url.Host

将不允许的域与请求域匹配。但是如前所述,这可以被知道如何的人很容易地绕过。