是否有可能只有一些SSL页面的个性化ASP.NET Web应用程序?

时间:2009-03-17 16:39:25

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

我有一个登录后的网络应用程序,几乎可以个性化所有页面。

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

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

  

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

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

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

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

3 个答案:

答案 0 :(得分:1)

由于没有评论,我认为我会提供一个不合理但实际的解决方案。

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

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

从这里开始,您可以302-重定向任何没有SSL的请求。您可能希望从web.config中的自定义配置部分驱动哪些页面需要SSL。

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

答案 1 :(得分:1)

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

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

希望这有帮助。

答案 2 :(得分:0)

我们决定不在需要它们的少数页面中使用SSL。我们查看了其他做类似事情的Web应用程序,但他们没有使用SSL。我们并没有真正保护那些对恶意用户来说无论如何都有用的东西。

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