gpt4 book ai didi

php - 将所见即所得编辑器与 PHP 转义方法结合使用

转载 作者:行者123 更新时间:2023-11-29 01:52:48 25 4
gpt4 key购买 nike

我正在使用 Php 和 Mysql 构建一个小型/测试 CMS。在添加、编辑、删除和显示级别上一切都运行得非常好,但在完成我的代码后,我想在管理后端添加一个所见即所得的编辑器。

我的问题是我正在使用转义方法希望让我的表单更安全一点并尝试转义注入(inject),因此当在我的编辑器中添加样式文本、图像或任何其他 HTML 代码时,我将它们打印为行我页面上的代码(这是完全正确的,可以避免攻击)。

我的逃生方法:

function e($text) {
return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');}

有什么方法可以解决我的转义方法(我认为不应该这样做,因为如果我能做到,每个攻击者都可以做到)。

或者我应该将我的转义方法更改为另一种方法吗?

最佳答案

如果我对您的理解正确,您将允许您的用户将一些格式设置到他们将要创建的文本中。为此,您将添加一些 WYSISWYG 编辑器。但问题是如何区分允许和不允许的格式和特殊字符。您需要清理文本并仅保留有效的允许格式(HTML 标记)并删除所有恶意 JavaScript 或 HTML。

这并不像一开始听起来那么容易。我可以在这里看到几种方法。

  1. 最简单易用的解决方案 strip_tags并指定允许使用哪些标签。

但请记住 strip_tags 并不完美。让我在这里引用手册。

Because strip_tags() does not actually validate the HTML, partial or broken tags can result in the removal of more text/data than expected.

This function does not modify any attributes on the tags that you allow using allowable_tags, including the style and onmouseover attributes that a mischievous user may abuse when posting text that will be shown to other users.

这是一个已知问题。并且存在可以更好地清理 HTML 和 JS 以防止中断的库。

  1. 稍微复杂一点的解决方案是使用一些高级库来清理 HTML 代码。例如,这可能是 HTML Purifier

引用自文档

HTML Purifier will not only remove all malicious code (better known as XSS) with a thoroughly audited, secure yet permissive whitelist, it will also make sure your documents are standards compliant, something only achievable with a comprehensive knowledge of W3C's specifications.

存在解决相同任务的其他库。例如,您可以查看此 article where libraries are compared .最后,您可能会选择最好的。

  1. 完全不同的方法是避免用户编写 HTML 标记。要求他们写一些其他的标记,就像在 StackOverflow 或 Basecamp 或 GitHub 上完成的那样。 Markdown可能是个好方法。

对文本使用简单的标记可以让您完全避免损坏的 HTML 和 JavaScript 的问题,因为您可以转义所有内容并自行构建 HTML 标记。

编辑器可能看起来像我用来编写此消息的编辑器:)

关于php - 将所见即所得编辑器与 PHP 转义方法结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com