我有一个带有混合SSL的WebApplication(ASP.NET 3.5)。所有与帐户相关的页面均通过SSL提供。大多数其他页面都通过非SSL交付。要自动在HTTPS和HTTP之间切换 此组件. 。最近,有一个新闻项目,涉及非安全WiFi网络上的Toch Hijack用户会话。通过捕获通过非SSL连接传输的cookie,这应该是可能的。

这触发了我在此WebApplication中查看我的安全选择。我再次抓住了 本文 来自MSDN,尝试了 需求= true 我的Formsauthentication的属性。在我启动WebApplication之前,我意识到我的用户。在非SSL页面上的识别性将是无效的,因为包含此信息的cookie并未从WebBrowser发送给WebBrowser。

我需要一种通过SSL连接对用户进行身份验证的机制...即使在非SSL页面上,也可以记住此身份验证信息。

搜索时,我发现了 这个帖子. 。在我看来,这是一个很好的解决方案。但是,我想知道是否可以在会议状态中存储登录信息时找到解决方案?我正在考虑在global.asax中捕获application_authenticaterequest。检查连接是否安全,并检查Authcookie或会话。我不知道我将如何实施。也许您可以在我身上考虑一下?

有帮助吗?

解决方案

不幸的是,您的要求矛盾。您不能对非SSL进行安全的会话,因此我想挑战您的基本假设:为什么整个网站不使用SSL?

其他提示

从MVC常见问题解答(由Security Guru Levi回答的类似问题)要求属性不使用SSL。

•可以在控制器类型或操作方法上使用[requireHTTPS]属性,以说“只能通过SSL访问”。非SSL请求到控制器或操作将被重定向到SSL版本(如果HTTP GET)或被拒绝(如果是HTTP POST)。您可以覆盖requirehttpsattribute并根据需要更改此行为。没有[requireHTTP]属性内置的属性,但如果需要,您可以轻松地制作自己的属性。

还有html.actionlink()的过载,它采用协议参数;您可以将“ HTTP”或“ HTTPS”指定为协议。这是这样的超载上的MSDN文档。如果您没有指定协议或调用没有协议参数的过载,则假定您希望该链接具有与当前请求相同的协议。

MVC中我们没有[requienhttp]属性的原因是,它没有太大的好处。它不像[requirehttps]那样有趣,它鼓励用户做错事。例如,许多网站通过SSL登录,并在登录后将其重定向回HTTP,这绝对是错误的事情。您的登录cookie与用户名 +密码一样秘密,现在您将其在电线上的ClearText中发送。此外,您已经花时间执行握手并在运行MVC管道之前确保频道(这是使HTTPS慢的大部分)请求更快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top