如何使用Laravel允许WYSIWYG编辑器和禁用XSS攻击?

Ari*_*ona 8 php laravel laravel-4 laravel-3

我有一个企业级应用程序,其中登录用户有权使用WYSIWYG编辑器将​​文章发布到页面.(您可以将此应用程序视为网站构建器.)

一切都很好,但问题是;

  1. WYSIWYG编辑器发布一个包含HTML的文章,还有一些Laravel不喜欢的本地化字符串字符,因此Laravel的alpha_num支票无法通过.(因此我们不会在验证检查中使用它.)

  2. 我们需要允许像<,这样的字符",>因为他们可能想要使用WYSIWYG编辑器做一些基本的样式,因此htmlspecialchars()在回显/消毒值时不是一个选项,因为有害的东西就像<br>破坏.

  3. 用户能够发布类似的内容,<script type="text/javascript>alert('Hello');</script>或者</div></div></div><div style="width: 100%, height: 100% z-index: 999999">这是一个巨大的安全风险,我知道,但我们无法真正消毒/逃避任何事情.用户仍然可以编写<s<!---->cript>并通过检查.

所以,简而言之,我们不能依赖一些内置的Laravel和PHP函数.我们也无法禁用WYSIWYG编辑器,因为它经常在口语应用的大多数领域中使用.

避免这种情况的最佳方法是什么?

我正在考虑alpha_num在Laravel 之上创建一个自定义规则,它将被称为类似的东西alpha_num_localised_characters_plus_allowed_html_tags,并将该规则添加到包含WYSIWYG编辑器的任何输入.

这是一个好方法吗?还有更好的选择吗?你自己如何处理这些问题?

注意:请注意我们已经开发了一个庞大的应用程序,我们将依靠最快和最可维护的解决方案.

Ant*_*ani 2

您可以使用类似于 BBCode 或 Markdown 的标签系统来允许您的用户进行某些操作。这样,您可以确保输入将针对各种恶意脚本进行清理,只需在显示用户内容时使用词法分析器和 XSS 保护即可。

编辑:要明白我的意思,您可以使用 CKEditor 作为所见即所得编辑器,与 BBCode 插件结合使用: