【问题标题】:Is it possible to have a personalized ASP.NET web app with only some SSL pages?是否有可能拥有一个只有一些 SSL 页面的个性化 ASP.NET Web 应用程序?
【发布时间】:2010-10-13 21:25:22
【问题描述】:

我有一个网络应用程序,一旦登录,几乎所有页面都会个性化。

我希望能够使用 SSL 锁定一些可能包含敏感信息的特定页面。据我所知,一旦您通过 SSL 登录页面(网站区域)登录,我用来存储大量个性化和用户凭据的会话信息对非 SSL 部分不可用的网站,因为它们被认为是 2 个独立的应用程序。

这个 MSDN 文档几乎说明了我在说什么:MSDN Doc

注意:如果您使用这种类型的网站结构,您的应用程序不得依赖非 SSL 页面上的用户身份。在上述配置中,对于非 SSL 页面的请求,不会发送表单身份验证票证。因此,用户被认为是匿名的。这对需要用户名的相关功能有影响,例如个性化。

我也没有使用表单身份验证。当用户登录时,会话对象会存储他们的凭据,包括他们的 IP。如果此会话对象存在于具有相同 IP 的特定用户,则他们被视为“已登录”并启用个性化功能。

所以我的问题是,是否有任何解决方法可以让我的登录页面和其他一些页面使用 SSL,网站的重置不是,并且所有页面都可以访问相同的会话变量?

如果不能,任何人都可以建议任何其他方法来完成相同类型的个性化功能吗?

【问题讨论】:

    标签: c# asp.net security web-applications


    【解决方案1】:

    由于没有 cmets,我想我会提供一个不雅但实用的解决方案。

    在表单身份验证配置块中关闭 RequireHTTPS。

    接下来,您将创建一个实现 IHttpModule 的自定义类。这个接口有一个 Init 方法,它接受一个 HTTPApplication 实例作为参数。然后,您可以附加到此实例上的“AuthenticateRequest”事件。

    从这里,您可以在不使用 SSL 的情况下对任何应执行的请求进行 302 重定向。您可能希望从 web.config 中的自定义配置部分驱动哪些页面需要 SSL。

    要将此类用于您的请求,您必须在 web.config 的 HttpModules 部分添加一行。

    【讨论】:

      【解决方案2】:

      首先,请查看此代码项目文章:http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx - 这将使您能够“踩”和“踩”某些页面的 https。

      关于您的会话问题,我认为您有点卡住了。标准表单身份验证机制存储一个 cookie 来识别通过 http 或 https 可用的经过身份验证的会话。我的建议是切换到使用表单身份验证,并使用 ProviderUserKey guid 作为访问每个会话数据的密钥。

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        我们决定在需要 SSL 的那几个页面中不使用 SSL。我们查看了其他做类似事情但不使用 SSL 的 Web 应用程序。我们并没有真正保护任何对恶意用户来说非常有用的东西,不管怎样,他们都会遇到窃取的麻烦。

        在决定移除 SSL 之前,我确实考虑过的一个选择是将用户会话存储在应用程序的 Web 服务接口上。每个页面调用都将访问 Web 服务以访问会话信息。这将在每个页面调用上强制执行,以确保会话保持活动状态。在做出 SSL 决定之前,我没有对使用此解决方案进行过多调查,因此此解决方案可能存在许多缺点,尤其是每次服务器命中时都必须对 Web 服务进行额外调用。

        【讨论】:

          猜你喜欢
          • 2011-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-02
          • 1970-01-01
          • 2010-11-17
          • 2014-06-06
          相关资源
          最近更新 更多