checkmarx对Cross Site History Manipulation描述如下:
风险会造成的后果
攻击者可以通过操纵浏览器的 JavaScript History对象破坏浏览器的同源策略并侵犯用户的隐私。在某些情况下,这使攻击者可以检测用户是否已登录、跟踪用户的活动或推断其他条件值的 状态。这也可能泄露初始攻击的结果,从而增强跨站点请求伪造
(XSRF) 攻击。
起因 如何发生
现代浏览器会将用户的浏览历史记录作为先前访问过的 URL 的堆栈公开给本地
JavaScript。虽然浏览器强制执行严格的同源策略 (SOP)
以防止一个网站的页面读取在其他网站上访问的 URL,但 History
对象确实会泄漏历史堆栈的大小。在某些情况下,仅使用这些信息,攻击者即可以发现应用程序在服务器端执行的某些检查的结果。例如,如果应用程序将未经身份验证的用户重定向到登录页面,则另一个网站上的脚本可以通过检查 History 对象的长度来检测 用户是否已登录。
当应用程序根据某些条件的值、用户的服务器端会话的状态重定向用户的浏览器时,就会造成信息泄漏。例如,用户是否已经过应用程序的身份验证、用户是否访问了有特定参数的特定页面,或某些应用程序数据的值。
解决方案
将一个随机值作为参数添加到所有目标 URL。
下面示例为Cross Site History Manipulation漏洞
If (!isAuthenticated)
response.sendRedirect("Login.jsp");
下面是checkmarx给出的整改方案,但是此方案使用不安全的随机数,会报出另一个漏洞Use of Cryptographically Weak PRNG和Fortify的Inse