我需要在CppCMS中使用C++实现一个简单高效的XSS过滤器。由于它是一个使用C++的高性能框架,因此无法使用已有的PHP编写的高质量过滤器。
基本思路是提供一个白名单HTML标签和这些标签的白名单选项的过滤器。例如,典型的HTML输入可以包括<b>
、<i>
标签和带有href
属性的<a>
标签。但是,直接实现是不够好的,因为即使是允许的简单链接也可能包含XSS攻击:
<a href="javascript:alert('XSS')">Click On Me</a>
有许多其他例子可以在这里找到。因此,我也考虑了一种可能性,即创建标签的前缀白名单,例如href/src -- 因此,我总是需要检查它是否以
(https?|ftp)://
开头。问题:
1.这些假设是否足够适用于大多数情况?是否意味着如果我不给出
style
标签的选项,并使用前缀的白名单来检查src/href,则可以解决XSS问题?是否有无法通过此方式修复的问题?2.是否有HTML/XHTML形式语法的良好参考文献,以便编写简单的解析器,以清除所有不正确或禁止的标签,例如
<script>
?