据我了解,安全团队报告的调查结果是有效的。让我们来看看他们可能报告的场景,因为我也在手动应用程序评估中看到了这一点。
场景1:以应用程序的登录页面为例,或者更好的是信用卡申请表。在填写完所有表单字段并单击“提交”按钮后,客户端会在 POST 请求中将敏感数据发送到服务器。如果服务器响应是“200 OK”,浏览器会将 POST 数据保存在浏览器内存中,以允许重放攻击。如之前的回复中所述,可以点击“后退”按钮,然后点击“转发”,然后点击“刷新”,浏览器将再次重新发送敏感的 POST 数据。您通常会从浏览器收到一条弹出消息,告知您它将重新发送之前发送的数据。
场景 2:相同的数据通过 POST 请求发送到服务器。这一次,服务器返回一些 300 类型的状态代码,可能是一个 302 重定向,它将客户端发送到下一页。然而,收到 300 类型响应的客户端浏览器不会在浏览器内存中维护或缓存 POST 的数据。您不能重复后退、前进、刷新实验,并希望看到以前发布的数据重播。这完全取决于服务器响应。
如果您可以访问本地代理(例如 Burp),则可以自行测试。将浏览器设置为指向您的代理。访问易受攻击的网页。填写字段,点击提交,然后查看在您的代理工具中发送的请求。您应该会在 POST 请求的数据部分看到包含敏感数据的各种表单字段。假设服务器响应是“200 OK”,则进入下一步。在浏览器上,点击后退按钮,然后前进,然后刷新。您应该从浏览器中收到弹出消息,提醒您它即将重新发送以前发送的数据。点击确定。现在查看代理工具中的最后一个请求。它将重新发送 POST 请求和之前的相同敏感数据。现在,在返回 302 重定向到 POST 数据的网站上尝试同样的实验。
那么,您可能会问的风险或威胁是什么?首先是重放攻击。您最关心的应该是恶意软件。您的第二大威胁向量将是共享设备。令人担忧的是,恶意软件或有权访问设备的人可能会“重放”请求,然后能够看到在 POST 请求中发送的敏感数据。恶意软件只会直接从浏览器内存中读取数据。一个人将不得不使用工具再次查看 POST 请求。
***一些注意事项:
*使用 Autocomplete=off 只会阻止数据存储在表单字段存储容器中。它独立于这个问题,并且与这个问题无关。但是,我建议确保任何接受敏感信息的表单字段都应将自动完成设置为“关闭”。恶意软件经常查找并读取保存的表单字段数据,因为它通常包含大量信息。
**使用缓存控制标头也与此问题无关,因为它适用于缓存到磁盘的页面(临时 Internet 目录)。同样,您应该使用缓存控制指令并防止敏感数据以明文形式存储在系统上。
*** 对 json 请求中 POST 的数据的“200 OK”响应不是问题。这是我能想到的唯一一种情况,当服务器以“200 OK”响应时,您无法执行重放攻击。
希望这可以帮助。由于攻击向量的限制,我确信它没有被列为高等级漏洞。它只是安全洋葱中无数层中的一层!