【问题标题】:Preparing my ASP.NET / MVC site to use SSL?准备我的 ASP.NET / MVC 站点以使用 SSL?
【发布时间】:2012-03-23 19:21:16
【问题描述】:

我正准备在我的主机上安装SSL cert

我的理解是(如果我错了,请纠正我......):

  1. 一旦托管人员安装了证书,我就可以在HttpHttps 上浏览我的网站(没有什么能阻止我继续使用 Http)?

  2. 我唯一需要做的就是添加逻辑(在 MVC 的情况下,控制器属性/过滤器)以强制我选择的某些页面重定向到 Https(例如,添加[RequiresHttps] 属性谨慎)。

我是否需要担心在这些事情上做任何额外的事情以确保我正确使用SSL?我不确定是否需要更改与逻辑有关的内容:

  1. Cookie

  2. PayPal Express 集成

另外,我计划仅在购物车、结帐、登录、帐户和管理页面上添加[RequiresHttps]。我希望将我的产品浏览/购物页面留在Http,因为我听说使用Https 会有更多开销。这正常/可以接受/可以吗?

还有一个问题……我知道 ASP.NET 以 Auth cookie 的形式存储了一些登录信息。用户可以在Https 页面中登录,但随后可以返回并在Http 页面中浏览?我想知道这是否会造成安全漏洞,因为用户再次登录并浏览Http。这会破坏使用SSL 的意义吗?

我在这方面有点新手......所以我们将不胜感激。

【问题讨论】:

  • 一切基本上都是正确的,尽管我和你一样担心使用最初在 HTTPS 上通过 HTTP 获得的 cookie。如果它在未加密的情况下传输,它将很容易受到通信窥探。我认为您可以通过将 cookie 限制为 HTTPS 来避免这种情况,但我不知道如何为 ASP.NET 身份验证 cookie 执行此操作

标签: asp.net-mvc ssl


【解决方案1】:

1) 是的,你是对的。

2) 是的。通过自动将客户端重定向到页面的 HTTPS 版本,您可以选择更优雅地处理 HTTP 403.4 代码(需要 SSL)。

至于身份验证 cookie,我为您找到了 MSDN article。基本上,您可以将您的网站(和客户端的浏览器)设置为仅通过 HTTPS 传输身份验证 cookie。这样它就不会受到未加密通道的网络窥探。

当然,这只有在您的所有 [Authorize] 操作都仅限 HTTPS 时才有可能。

【讨论】:

    【解决方案2】:

    首先从您的问题开始,(1)没有什么会阻止您在相同的页面上使用 http ether https

    和 (2) 是的您需要在仅显示为 https 的页面和显示为 http 的页面上添加逻辑。如果有人想知道,为什么不全部显示为 https 原因是速度,当您将它们作为 https 发送时,页面更大并且编码/解码需要更多一点,所以如果您不需要 https,只需切换它到 http。

    Switching Between HTTP and HTTPS Automatically 是一个非常好的代码,用于快速轻松地实现切换逻辑。

    Cookies

    当 cookie 与用户的凭据有关时,您需要强制它仅与安全页面一起传输。这意味着,如果您使用 https 设置 cookie,则此 cookie 不会在非安全页面上传输,因此保持安全,中间人无法窃取它。这里的提示是这个 cookie 不能在 http 页面上读取 - 所以你可以知道用户是 A,或者 B 只能在安全页面上。

    购物车 - 产品

    是的,这是正常的:因为信息不是那么特别,所以将产品和购物车置于不安全的连接状态。当您使用用户真实数据(例如姓名、电子邮件、地址等)时,您会启动 https 页面。

    授权 cookie

    如果您将其设置为仅安全,则此 cookie 不会显示/读取/存在于不安全的页面上。如果您不使其安全,这是一个问题。

    Response.Cookies[s].Secure = true;
    

    再说几句

    我们对安全和非安全页面所做的是,我们实际上将用户数据分成两部分。一种是安全的,一种是不安全的。所以我们实际上使用了两种 cookie,一种是安全的,一种是不安全的。

    不安全的 cookie 是例如连接购物车上所有产品的 cookie,或者可能是用户的历史记录(产品看到了什么) 这也是我们实际上并不关心是否有人得到它,因为即使是代理可以从 url 中看到用户历史记录,或者用户看到的内容。

    安全 cookie 是身份验证,它为用户保留一些关键信息。因此,非安全 cookie 在页面上随处可见,安全仅在结帐、登录等时使用。

    相关

    MSDN, How To: Protect Forms Authentication in ASP.NET 2.0
    Setting up SSL page only on login page
    Can some hacker steal the cookie from a user and login with that name on a web site?

    【讨论】:

    • 很好的信息。我现在了解这是如何工作的,但是遇到了 1 个问题,也许您可​​以提供帮助。我让用户在 SSL 下登录,但是当我把他放回浏览页面时,我切换回非 SSL。但是,我的标题右上角有一个小链接,上面写着“欢迎,[AccountName]!”在网站的每个页面上。 User.Identity.IsAuthenticated 回来是假的,因为 cookie 是一个 SSL cookie ......所以这条消息不再显示了。有没有快速的解决方法来完成这项工作?
    • @RalphN 不,没有解决办法。您需要将用户名与用户的非安全cookie连接起来。
    • 我在想我可能会吞下我的恐惧,然后让整个网站都使用 SSL……据我所知,握手时只有轻微的无意中听到,但今天服务器上的加密是荒谬的快速地。如果有人觉得我表现不佳并受到打击,请告诉我(这是一个电子商务网站......卖东西......显示图片/描述,添加到购物车等)
    • @RalphN google 已将所有页面设为 ssl。无论您遇到更多问题,ssl 页面的大小都更大,并且不允许缓存使您的页面变得很慢。此外,任何缺少 ssl 的照片或其他资源都可能会引发警告消息,这可能会让用户感到害怕并离开。
    • 那太糟糕了。我迫切需要图像缓存,因为我的商店有比平常更大的图像。我想我已经想到了一种解决方法。当用户登录时,我将创建第二个“用户名”非 ssl cookie,它与真正的身份验证 cookie 类似地过期。我会驾驶那个“欢迎......!”基于非 SSL cookie 的消息。现在打算尝试实现它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多