5

我确信在某个地方一定有这个骗局,但我不容易找到它:

给定一个本身使用表单身份验证的 asp.net 应用程序,保护面向公众的演示站点的最佳实践是什么,以使不在“人群”中的任何人都无法看到该站点?

  • IP过滤?
  • 围绕表单身份验证的基本身份验证?我已经把头撞到了这个上面,似乎无法让它工作:/
  • 虚拟专用网?
  • 首先“使演示站点公开面临被认为是有害的”?
4

5 回答 5

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 安全性,当您尝试匿名点击它时会给出质询响应,或者通过给用户一个漂亮的登录页面。

于 2012-05-15T14:53:11.850 回答
2

通常,“演示站点”使用基本身份验证进行保护。例如,向浏览器返回 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 Membership Provider 进行比较。以此为前提,您可以构建一个类似的 HttpModule 来将标头数据与存储在 AppSettings 中的用户/通行证进行比较,并将该模块包含在您的演示站点中。神奇的酱汁是您没有在 Authenticate 上设置 401 状态,而是在 EndRequest 中设置 - 在 FormsAuthenticationModule 完成后,它是“401 到 302 登录页面”。唯一的缺点是<location>标签必须由 Forms Auth 或 Basic Auth 使用,但不能同时使用。如果用例真的是“保护整个演示站点”,那么将 Basic Auth 模块编码为“只做这一切”就足够了。我大约是这样做的 2/3。完成后,我可能会将其发布到 GitHub,因为它非常酷。唉,技术并不难,也许解决方案的描述就足够了。

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

于 2012-05-20T06:19:46.423 回答
1
  • 您可以按 IP 过滤 - 我以前在后端管理系统中做过这个。这在我的情况下工作得很好,因为唯一的用户拥有静态 IP,但我希望大多数人没有这个,所以你必须不断地调整以允许访问。

  • 使用 IIS 中的一些设置,您可以添加额外的授权级别(您将不得不谷歌如何做到这一点) - 然后用户将需要登录一次才能查看该站点并再次在登录屏幕上。

  • 你在这里一针见血——如果你不想让人们看到它,就不要把它放在互联网上。

基于以上内容,我的回答要么什么都不做,而是依靠您的登录系统(毕竟唯一公开的是登录页面)或不公开 - 使用某种 VPN。

于 2012-05-11T14:15:06.317 回答
1

您可能想尝试为站点使用 80 以外的其他端口。如果您真的不想让人们知道它,这不是世界上最安全的事情,但它绝对是通过默默无闻的安全性。它不会阻止您使用表单身份验证,但您可能需要一些额外的配置来巧妙地在 http 和 https 流量之间转换。

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

于 2012-05-14T15:38:19.270 回答
0

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

非常简单的密码机制。'.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
于 2012-05-16T04:22:22.917 回答