gpt4 book ai didi

jsp - 跨站点历史操作解决方案

转载 作者:行者123 更新时间:2023-12-04 14:27:10 25 4
gpt4 key购买 nike

我们开发了一个新应用程序,在移动更改之前,我们使用 checkmarx 对代码进行了静态扫描。在名为 Cross Site History Manipulation 的代码中发现了一个中等级别的漏洞。

这在我验证 session 值的 JSP 页面中被删除:

if(request.getSession().getAttribute("sesStrUID")!=null)

你能帮我理解这个漏洞吗?应该怎么做才能消除这个漏洞?

最佳答案

这是我从首席软件架构师 Alex Roichman 那里得到的答案@Checkmarx :
跨站点历史操作是一种浏览器同源策略违规行为,它可以从另一个源中了解某个条件的状态。
例如,许多网站会在向用户展示其私有(private)数据之前检查用户是否经过身份验证。
这可以通过以下代码完成:

If (!IsAuthenticated())
Redirect “login.jsp”

通过使用 XSHM,可以从另一个站点了解用户当前是否已通过该站点的身份验证。

现在让我们寻找给定的行:
if(request.getSession().getAttribute("sesStrUID")!=null)

此行似乎检查用户是否有 session ,甚至是否已经过身份验证。
由于在“if”语句中存在“重定向”,因此任何其他站点都可能知道 request.getSession().getAttribute("sesStrUID")!=null或者如果用户已经通过身份验证。
因此,这个结果是正确的,它与旧的或现代的浏览器无关:所有现代浏览器都提供对 history.lengh 的访问,
此属性可能会导致通过 XSHM 侵犯隐私,并且由于向后兼容性问题,没有简单的修复方法。

X-Frame-Options: DENY可以防止 XSHM 的 IFrame 版本,但旧浏览器不支持此选项。

在 SilverlightFox 的回答后编辑

我同意我们有非常相似的答案。

不过,关于:

"3xx redirects do not cause the value of history.length to be increased in modern browsers"



这是正确的,XSHM 正是基于此。

寻找以下攻击场景:
  • 在 IFrame 中打开“Login.jsp” - 现在历史记录顶部包含“login.jsp”。
  • 打开 'ShowSecretInfo.jsp' - 如果服务器将重定向到 3xx 的 'Login.jsp',那么 history.length 将保持不变,如果服务器将显示 'ShowSecretInfo.jsp' - history.length 将增加 1。

  • 这意味着受攻击的用户已通过身份验证——侵犯隐私。

    关于jsp - 跨站点历史操作解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27782805/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com