【发布时间】:2013-06-23 06:52:42
【问题描述】:
我有一个企业级应用程序,其中登录用户有权使用所见即所得编辑器将文章发布到页面。 (您可以将此应用程序视为网站构建器。)
一切正常,但问题是;
WYSIWYG 编辑器发布包含 HTML 的文章,以及 Laravel 不喜欢的一些本地化字符串字符,因此 Laravel 的
alpha_num检查无法通过。 (因此我们不在验证检查中使用它。)我们需要允许
<、"、>等字符,因为他们可能想使用所见即所得编辑器进行一些基本的样式设置,因此在回显/清理值时,htmlspecialchars()不是一个选项,因为像<br>'s break 这样有害的东西。用户可以发布诸如
<script type="text/javascript>alert('Hello');</script>或</div></div></div><div style="width: 100%, height: 100% z-index: 999999">之类的内容,我知道这是一个巨大的安全风险,但我们无法真正清理/逃避任何内容。用户仍然可以写<s<!---->cript>并通过检查。
所以,简而言之,我们不能依赖一些内置的 Laravel 和 PHP 函数。我们也不能禁用 WYSIWYG 编辑器,因为它经常用于口语应用的大部分领域。
避免这种情况的最佳方法是什么?
我正在考虑在 Laravel 上的 alpha_num 之上创建一个自定义规则,该规则将被称为 alpha_num_localised_characters_plus_allowed_html_tags 并将该规则添加到任何包含所见即所得编辑器的输入中。
这是一个好方法吗?有没有更好的选择?您自己如何处理这些问题?
注意:请注意,我们已经开发了一个大型应用程序,我们将依赖最快和最可维护的解决方案。
【问题讨论】:
-
我想补充一点。我们目前将任何未经 Laravel 验证的输入(例如 email|alpha|alpha_dash|custom_validations)传递给 HTMLPurifier::purify() 验证。让我知道是否有更快的方法!
-
我不会使用 htmlpurifier “验证” - 而是使用它来确保输入是“安全的”。如果该字段是必需的,我将对 laravel 进行的唯一验证是“必需”。 - 有关更多详细信息,请参阅下面的答案
标签: php laravel laravel-4 laravel-3