【问题标题】:How to protect session id and cookies without using SSL/HTTPS?如何在不使用 SSL/HTTPS 的情况下保护会话 ID 和 cookie?
【发布时间】:2011-03-28 13:29:31
【问题描述】:

据我所知,如果我不使用 SSL/HTTPS,cookie 和会话 ID 会以纯文本形式通过网络传输。附加者可以使用数据包嗅探器来获取这些信息。如何在不使用 SSL/HTTPS 的情况下保护它?我猜该解决方案将包括在客户端和服务器端都做一些事情来处理这个问题。我的服务器端是 Java。

【问题讨论】:

    标签: security ssl https


    【解决方案1】:

    您可以使用 Secure Cookie Protocol (PDF) 之类的东西在发送 cookie 之前对其进行加密。您可以使用请求的 IP 地址或其他 100% 特定于一般用户的标识符来代替会话标识符。

    因此,要设置它,您需要创建一个服务器密钥 k。然后,您将按如下方式创建 cookie:

    keyhmac = HMAC(user name + expiration time, k)
    encrypted = ENCRYPT(data, keyhmac)
    hmacenc = HMAC(user name + expiration time + data + session identifier, keyhmac)
    cookie = user name + expiration time + encrypted + hmacenc;
    

    然后,您可以稍后使用相反的过程对其进行解密。 HMAC 验证它没有在您的服务器外部被篡改(假设 k 确实是秘密的)...

    它包含会话标识符(SSL 是最好的,但 IP 可以提供服务)这一事实意味着它不受重放攻击或劫持攻击的影响。

    SSL 是最好的,但是您可以通过使用这样的加密方案来获得一个非常好的系统。绝对最好的办法是将此方案与 SSL 相结合,这样可以防止各种恶意行为(包括 MITM 篡改,但不包括其他 MITM 攻击)...

    【讨论】:

    • 它说安全 Cookie 协议需要 SSL。
    • @rook,你能提供一个更好的解决方案,或者至少解释一下这个有什么问题吗?当然,SSL 会更好,但考虑到原始问题的参数,这个答案有什么问题?
    • @ircmaxell 端到端传输层保护(如 SSL 提供的保护)是唯一的解决方案。在这种情况下,您仍在传输静态值,以便客户端可以向服务器进行身份验证。没有什么可以阻止窃听者获取此值。有一些 JavaScript 解决方案,但失败是无法以经过身份验证的方式完成 JavaScript 代码的原始加载。
    • @ircmaxell 此外,“安全 Cookie 协议”是对密码学的严重滥用,因为使用简单的密码随机数作为 cookie 更安全、更容易。如果您继续关注新闻,您会听说过 asp.net oracle padding 漏洞,该漏洞表明您可以在某些 Web 应用程序上远程执行代码,因为这种密码学的滥用。 “复杂性是安全的最大敌人”——布鲁斯·施奈尔
    • 安全 Cookie 协议需要 SSL。还需要一个单独的、安全的会话标识符,只有服务器和客户端知道(这听起来很像 cookie,这让我在无限回归中头晕目眩)。多么糟糕的协议。在这种情况下将无法工作。
    【解决方案2】:

    简短回答:不加密意味着未加密的数据。

    更长的答案:如果您想加密您的 HTML 内容(我将 cookie 和会话 ID 包含为 HTML 内容),您必须加密您的数据。您有两个选择: HTTPS 或 b。推出自己的计划。选项 b 几乎不是一个好主意。

    【讨论】:

    • HTTPs 是否解决了用户身份验证和仅授权用户访问 API 的几乎所有安全问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多