我需要在 C++ 中为CppCMS实现一个简单高效的 XSS 过滤器。我不能使用现有的用 PHP 编写的高质量过滤器,因为它是使用 C++ 的高性能框架。
基本思想是提供一个过滤器,该过滤器具有 HTML 标签的 while 列表和这些标签的选项白名单。例如。典型的 HTML 输入可以由
<b>
, <i>
, 标记和<a>
带有 . 的标记组成href
。但简单的实现还不够好,因为即使是允许的简单链接也可能包含 XSS:
<a href="javascript:alert('XSS')">Click On Me</a>
那里还有很多其他的例子。所以我也想为像 href/src 这样的标签创建一个前缀白名单——所以我总是需要检查它是否以(https?|ftp)://
问题:
- 这些假设是否足以满足大多数目的?这意味着如果我不提供
style
标签选项并使用前缀白名单检查 src/href 是否可以解决 XSS 问题?是否存在无法通过这种方式解决的问题? - 为了编写简单的解析器来清除所有不正确的禁止标记,如 HTML/XHTML 的形式语法是否有很好的参考?
<script>