8

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

一切正常,但问题是;

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

  2. 我们需要允许 , 之类的字符,<因为他们可能想使用 WYSIWYG 编辑器做一些基本的样式设置,所以在回显/清理值时不是一个选项,因为像's break 这样有害的东西。">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并将该规则添加到任何包含所见即所得编辑器的输入中。

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

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

4

5 回答 5

3

您可以通过strip_tags运行所有内容并只允许尽可能少的标签吗?

您可能还想查看html 净化器,它应该为您提供更多选项,包括对 css 的控制

我通常做的是保存所见即所得内容的两个副本:

  1. 未经过滤的原始内容
  2. 过滤后的内容

如果我发现重要的内容已被删除,这允许我重新处理原始内容,并在编辑时向用户显示他们的原始 html。显然,我会在网站上显示的任何地方显示过滤后的内容。

于 2013-06-26T09:34:46.420 回答
2

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

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

于 2013-07-01T16:33:36.393 回答
0

使用 Laravel 你可能还需要清理刀片模板的内容。您不希望用户输入如下内容:{{{phpInfo()}}}。

构建所见即所得的编辑器需要用户有一定程度的信任。如果您根本不信任用户,那么您最好的选择就是前面提到的使用自定义标签。

于 2014-05-14T11:49:18.100 回答
0

我相信 xss 攻击是一个输出问题。

如果您存储没有安全风险

<script>alert('Hacking your website in 3...2...')</script>

在您的数据库中 - 它只是文本 - 它没有任何意义。我鼓励逃避所有输出,不管它来自哪里。这是一个很好的讨论,进一步说明了为什么要过滤输出而不是输入:

输入与输出的 html/XSS 转义

于 2020-05-22T09:32:31.890 回答
-1

我不知道这对您来说有多可行,但一种快速简便的解决方案是使用httpOnly cookies 。它通过注入恶意 javascript 来解决 XSS 攻击,因为这些 cookie 无法被 javascript 访问。您可以尝试将敏感数据放在 httpOnly cookie 中,而将不那么敏感的数据放在普通 cookie 中。看到这个: http: //www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html

于 2013-06-26T08:28:23.287 回答