我们的遗留应用程序最初设计为允许为可定制页面存储任何 html 标签。此类页面的想法是存储客户需要的任何 html,然后在某些时候有可能呈现此 html 数据。
这种方法允许用户存储任何 XSS。我们当前的目标是定义和执行不允许存储任何 XSS 的策略。
我们根据一些预定义的规则研究了几种能够清理 html 的方法:
但是这两种方法都是基于消毒而不是验证。所以基本场景可能如下所示:
- 用户输入一些数据来输入
- 用户输入被清理并检查与原始(初始 - 步骤 1)用户输入是否相等。
- 如果有任何差异,则认为验证失败。
这种方法适用于新数据。如果是遗留数据,我们会遇到几个问题:
- 如果用户遗留数据包含禁止元素,用户将无法保存稍微修改过的 html 内容版本。
- 以下流程会使用户感到困惑:
- 用户编辑包含与新定义的策略有关的禁止标签/内容的旧数据。
- 用户替换所有内容并保存。
- 用户出于某种原因决定恢复到旧版本
- 不允许用户保存以前的版本,因为它包含禁止的标签/内容。
于是出现以下问题:
- 验证恶意 html 元素和 XSS 向量的用户输入的最佳方法是什么?
- 哪种方法可用于解决遗留数据的上述问题?