限制面向公众的asp.net应用程序演示站点?

时间:2012-05-11 13:53:01

标签: asp.net forms-authentication basic-authentication

我确信在某个地方必须有一个骗局,但我找不到它:

鉴于一个asp.net应用程序本身使用表单身份验证,保护面向公众的演示站点的最佳做法是什么,这样任何不在“人群中”的人都可以看到该站点吗

  • IP过滤?
  • 基本身份验证包裹在表单身份验证?我对这个问题感到头疼,似乎无法使其发挥作用:/
  • VPN?
  • “首先让一个公众面临被视为有害的演示网站”?

5 个答案:

答案 0 :(得分:3)

您是否考虑过利用您的Web.Config?

对于您希望使用匿名访问的区域:

<location path="unsecured_path">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

或拒绝匿名用户

<location path="secured_path">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

如果您拒绝匿名用户,则需要一种方法来验证您的用户。可以通过Windows安全性在您尝试匿名访问时提供质询响应,也可以通过为用户提供漂亮的登录页面。

答案 1 :(得分:1)

  • 您可以按IP过滤 - 我之前在后端管理系统中完成了此操作。这在我的情况下运行良好,因为唯一的用户有静态IP,但我希望大多数人没有这个,所以你将不断调整以允许访问。

  • 使用IIS中的某些设置,您可以添加额外级别的授权(您将需要Google如何执行此操作) - 用户需要登录一次才能在登录屏幕上再次查看该网站。< / p>

  • 你在这里敲了一下钉子 - 如果你不想让人看到它,就不要把它放在网上。

基于以上所述我的答案是要么什么也不做,依靠你的登录系统(毕竟只有公共是登录页面)或不公开 - 使用某种VPN。

答案 2 :(得分:1)

您可能想尝试为网站使用80以外的其他端口。如果你真的不想让人们知道它,那么它不是世界上最安全的东西,但它绝对是默默无闻的安全。它不会阻止您使用表单身份验证,但您可能需要一些额外的配置来整齐地在http和https流量之间进行转换。

因此,如果您的网站为http://test.org,并且您还将演示网站设置为http://test.org:9666,那么该网站的任何常规流量都将访问非演示网站。这可能不太清楚,但我希望它有意义地得到这个想法。

答案 3 :(得分:1)

通常,“演示站点”使用基本身份验证进行保护。例如将401返回到具有基本身份验证质询的浏览器,该挑战将变为提示凭据。从理论上讲,一旦完成,网站的其余部分就是常规内容 - 在需要时形成身份验证。

ASP.NET中这种方法的难点在于,默认的FormsAuthenticationProvider是硬连线的,将401解释为“需要302到登录页面”。以此为前提,同时进行表单身份验证和基本身份验证是一项挑战。

此外,IIS内置的基本身份验证使用Windows作为身份验证存储(Active Directory或本地Windows帐户。)让它使用不同的凭据存储并不容易“在框中”。

http://custombasicauth.codeplex.com/是我一直关注的项目,非常有趣。它提供了一个自定义的基本身份验证提供程序,允许您从其他提供程序存储区装配基本身份验证弹出将源打开到http://custombasicauth.codeplex.com/SourceControl/changeset/view/53965#183990http://custombasicauth.codeplex.com/SourceControl/changeset/view/53965#183995,看看它们只是提取Base64编码的头,并将其与ASP.NET成员资格提供程序进行比较。以此为前提,您可以安装类似的HttpModule来将头数据与存储在AppSettings中的用户/传递进行比较,并将模块包含在您的演示站点中。神奇的问题是你没有在Authenticate上设置401状态,你在EndRequest上设置 - 在FormsAuthenticationModule完成它之后的“401到302登录页面”。唯一的缺点是Forms Auth或Basic Auth必须使用<location>标签,但不能同时使用两者。如果用例真正“保护整个演示站点”,那么将Basic Auth模块编码为“只做全部”就足够了。我大约有2/3的做法。当我完成后,我可能会把它发布到GitHub,因为它变得非常酷。唉,这项技术并不难,也许对解决方案的描述就足够了。

如果你真的想要一个不干涉的无代码解决方案,请安装http://custombasicauth.codeplex.com/。它甚至可以在IIS中为您提供漂亮的配置窗口。 :D

答案 4 :(得分:0)

如果您熟悉Apache .htacces和.htpasswd配置,请查看http://www.helicontech.com/ape/(最多可释放3个站点)。 Helicon Ape是一个实现htacess / htpasswd功能的IIS插件。

非常简单的密码机制。 '.htpasswd'允许通过创建一个带有用户名的简单文本文件来控制访问:md5密码哈希。您可以自己MD5密码或使用http://aspirine.org/htpasswd_en.html之类的在线网站进行生成。例如:

apple:$apr1$4SZNOvdK$P7b6AkKVw.gXfdxlcvENp1
orange:$apr1$fvcwHIlc$OF7Mkhv8JfELDJnRmsku7/
banana:$apr1$IoSJc9GM$xtSY4nI3KCnTtjWKwxhmx/

用户/传递获取访问权限是:

apple:sauce
orange:juice
banana:split