我正在使用javascript WYSIWYG编辑器处理来自公众的用户输入,我正计划使用htmlpurifier来清理文本。
我认为在输入上使用htmlpurifier,将清理后的输入存储在数据库中,然后输出它而不进一步转义/过滤就足够了。但我听到其他意见,你应该总是逃避输出。
如果我已经清理了输入,有人可以解释为什么我需要清理输出吗?
答案 0 :(得分:4)
我假设您的WYSIWYG编辑器生成HTML,然后对其进行验证并将其放入数据库中。在这种情况下,验证已经发生,因此无需验证两次。
关于“逃避输出”,这是另一回事。您无法转义生成的HTML,否则您将无法使用格式化文本,并且标记将可见。当您不希望所述输出干扰页面的标记时,使用转义输出。
我补充一点,你必须非常小心你在验证阶段允许的内容。您可能只想要允许一些HTML标记和属性。
答案 1 :(得分:2)
为了100%安全,请使用HTMLPurifier两次。在将HTML保存到DB之前以及将其输出到屏幕之前 这种解决方案的巨大缺点是性能。过滤HTML时,HTMLPurifier超频,您可能会遇到更长的页面处理时间。
如果在向屏幕输出内容之前只执行1-2次过滤,那么你应该没问题,但如果你像我们一样对每个请求进行10次过滤,我们宁愿在输出大量文本时不要使用HTMLPurifier。 / p>
HTMLPurifier每次请求占用了60%的处理时间,我们希望实现低响应时间和更高的用户体验。
这取决于你的情况。如果您在输出之前可以负担得起使用HTMLPurifier,那就去吧 - 它会更好,您可以随时控制您想要允许的标签(对于新的,甚至是存储在数据库中的旧内容)。
答案 2 :(得分:1)
mantra 总是逃避你的输出,这是一个Text to HTML转换,是一个很好的合理默认值,可以在Web空间中工作时回退。在HTML Purifier的情况下,你明确地打破了这个好建议,因为你确实在执行HTML到HTML的转换,并且再次将HTML视为Text也没有用。