【问题标题】:User defined value in session a security risk?会话中的用户定义值存在安全风险?
【发布时间】:2017-03-02 19:46:48
【问题描述】:

用户可以在 http 会话中定义/指定的值是否存在安全风险?

request.getSession().setAttribute(KEY,  
request.getParameter(usernameParameter));

如果是这种情况,我该怎么做才能解决这个问题?

我能想到的一件事是一个巨大的价值,它填满了我的硬盘/内存,但这似乎有点牵强。限制字符串长度可以解决这个问题。

【问题讨论】:

  • 此时担心大小为时已晚。在您访问请求时,属性已经解析并存储在内存中。
  • @talex 请求属性长时间不保存,会话属性可能是。用户不可能创建大量具有巨大价值的会话。导致堆填满导致内存不足错误并使整个 servlet 容器崩溃?

标签: java security session servlets


【解决方案1】:

这取决于你用它做什么。除非容器有错误,否则在会话中仅包含用户定义的值应该没有太大风险。

这并不意味着让用户在会话中放置他们想要的任何东西都是一个好主意,因为例如容器确实有错误。

【讨论】:

  • Cheers Kayaman,我对检查会话中的值应该走多远有点困惑。我想限制字符串的大小是个好主意。但是我应该看内容吗?想到一件事是前一段时间的整个序列化错误,servlet 容器可能会在某些时候序列化/反序列化会话(例如关闭启动或在集群中分发会话)。当我只看大小时,用户是否有可能在会话中放入“坏”的序列化代码?
  • 什么是“错误的序列化代码”?我假设我们正在谈论用户将文本粘贴到会话中。并不是说你就可以实现像 SQL 注入这样的东西。
  • 是的,确实是文本。但我不知道您是否可以在由 servlet 容器序列化/处理或由容器中的其他相关进程处理时,将“坏事”放在做“坏事”的文本中。请注意,我问了这个问题,因为我不知道这是否可能。我确实希望其他人知道。附带说明一下,错误的序列化代码与在公共语言库中使用某些技术有关,其中错误的序列化代码可以执行用户代码。那将是最糟糕的然后是 sql 注入。
  • 如果我没记错的话,序列化(或者更确切地说是反序列化)错误要复杂得多,并且需要您访问序列化数据并使用自定义 readObject() 方法和其他类似的东西。如果序列化机制将文本序列化为反序列化(或序列化)时会变得有害的东西,那将是一个巨大的缺陷。
【解决方案2】:

最后我决定只检查字符串长度。

大多数安全问题都与 servlet 容器/应用服务器如何实现其处理会话的方式有关。这似乎因容器而异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2019-02-20
    • 2015-02-17
    • 2012-04-05
    • 2012-02-18
    相关资源
    最近更新 更多