【问题标题】:Is it possible to view HttpSession attributes with client side exploit?是否可以使用客户端漏洞查看 HttpSession 属性?
【发布时间】:2014-05-03 09:11:28
【问题描述】:

我最近开始维护一个在线系统。它在前端使用带有 PrimeFaces 的 JSF,并带有 Java 后端。 JSF 对我来说是一项新技术。

在登录过程中,整个用户表(包括明文密码(即将修复))被加载到 HttpSession 属性中,并在系统的其他部分中引用。系统只有不到 50 个用户,所以数据的大小对我来说不是一个大问题。

然而,所有用户数据都在会话中这一事实是一个问题。

我是否不必要地担心,或者有没有办法通过客户端漏洞访问这些信息? 是否有任何其他理由可以作为紧急重写此机制的理由?

以下缩写代码:

login.xhtml

<p:inputText id="username" value="#{userBean.userName}" name="username"></p:inputText>
<p:password id="password" value="#{userBean.password}"></p:password>
<p:commandButton id="loginSubmit" value="Login" action="#{userBean.auth}"></p:commandButton>

UserBean.java

@ManagedBean(name = "userBean")
@SessionScoped
public class UserBean {
    public String auth() {
        // ...
        FacesContext fctx = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) fctx.getExternalContext().getSession(true);
        HashMap<Long, UserDetail> usersMap = dbBean.getAllUserDetails();
        session.setAttribute("usersMap", usersMap);
        // ...
    }
}

【问题讨论】:

  • HttpSession 存储在服务器端,不应对任何最终用户可见,除非他有权访问服务器。但是实际上没有必要在会话中保留密码。这只是一个糟糕的设计。密码必须在服务器内存中,只有身份验证所需的时间。
  • 同意。如果有人可以利用应用程序并在服务器上下文中运行代码,那么用户表是否处于会话中没有区别,利用者也可以访问托管 bean,然后可以访问数据库。这只是糟糕的设计,但它本身并不是一个安全漏洞。

标签: java jsf jsf-2 primefaces httpsession


【解决方案1】:

虽然cmets回答了你的问题,但还是总结一下吧:

  • 会话存储在服务器端,除非利用 JSF 实现的安全漏洞,否则任何客户端黑客都无法访问这些数据,这种情况非常罕见
  • 如果黑客能够破解服务器组件,他一定会获得 从数据库访问用户数据,只要它没有存储在用户会话中
  • 您的担忧是可以理解的,但您应该关注用户代码 缺陷或知道库缺陷而不是应用程序设计

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多