代码之家  ›  专栏  ›  技术社区  ›  Paul

会话安全

  •  3
  • Paul  · 技术社区  · 16 年前

    我正在一个公共网站上工作,该网站将使用加密到会话ID的数据库支持用户会话。我正在努力防止会话被劫持和篡改;我返回到客户端的会话数据本身的价值有限,但我想防止大规模盗窃。我在这里制定了一个小计划,但我想得到一些反馈和批评。

    • 当会话开始时,会给客户机一个唯一的密钥和会话数据的散列值。
    • 在随后的每个请求中,客户机发送一个会话密钥+其会话数据的散列值。
    • 如果修改了会话数据,将向客户机提供反映其会话数据的新哈希值。
    • 如果的请求包含与数据库不匹配的不正确哈希,则会将会话标记为已损坏。请求和会话的所有后续请求将通过复制受影响的会话来创建新会话。新会话引用了出于安全审核目的从中复制的会话。

    我想我可以观察那些被破坏的请求来扫描大规模的攻击。

    非常感谢。

    4 回复  |  直到 16 年前
        1
  •  2
  •   Varkhan    16 年前

    这看起来相对安全,但有两种方法可以规避:

    • 如果会话密钥被盗,哈希也可能被盗。只要合法客户机不做任何事情,劫持者就可以接管,并保持密钥/哈希/数据的一致性。在合法客户醒来之前你不会看到任何东西…如果有的话。

    • 在任何情况下,如果散列不够神秘/安全,可以从数据中简单地猜测出来(也可能是嗅探到的)。您可能应该使用某种随机salt(每个会话、每个用户、每个时间段…)来确保这是尽可能难以猜测的。

        2
  •  2
  •   Jaka Jančar    16 年前

    我不明白会话数据散列的意义是什么。它能解决什么问题?

    很可能 原因 问题,例如同时在两个选项卡中加载两个页面时。如果第一个请求更改了会话数据,但另一个请求已经发送,那么它将具有不正确的哈希。

    另外,如果你复制旧的会话,我不知道你用这个实现了什么?

    只要有一个简单的会话ID和:

    • 在登录时更改它以避免会话固定和
    • 将其锁定到一个IP,以避免攻击者通过侧插进行控制。

    为了防止攻击者看到数据,您必须使用SSL。

        3
  •  0
  •   jerebear    16 年前

    听起来不错。

    在您的身份验证算法中,您可能想要加入的一件事情是用户来自的IP地址。

    对于当前的用户身份验证来说,它可能不太好,但如果会话受到破坏,则另一个IP将是一个巨大的标志,但您可以使用该信息添加到IP表规则中,以阻止潜在的恶意用户。

    另一种想法是跟踪引用的URL。对于恶意行为,查看某人从何处获得一致性可能会揭示程序中的漏洞(如果有的话)。

        4
  •  0
  •   bgiles    16 年前

    您不能指望IP地址是唯一的或没有更改。企业防火墙通常通过NAT转换合并甚至随机更改IP地址。它可以使系统更安全,但它会破坏服务器的身份验证方案,这些方案试图要求相同的IP地址。

    在过去的几年里,还有另一个令人担忧的问题——系统比过去更加灵活。我经常“休眠”我的笔记本,而不是关闭它们,但这意味着我来自不同的IP地址在家里,工作,星巴克,等等。这可能会使服务器跳闸会话超时最短为15-30分钟-这只需要我从办公室到午餐等的时间。