使用所见即所得编辑器和PHP转义方法


Use WYSIWYG Editor with PHP escape Method

我正在使用Php和Mysql构建一个小型/测试CMS。在添加、编辑、删除和显示级别上,一切都令人惊讶,但在完成代码后,我想在Admin后端添加一个所见即所得编辑器。

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

我的逃生方法:

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

有没有办法绕过我的逃跑方法(我认为不应该这样做,因为如果我能做到,每个攻击者都能做到)。

还是应该将我的逃生方法改为其他方法?

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

这不是一项简单的任务,就像刚开始听起来的那样。我可以在这里看到几种方法。

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

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

因为strip_tags()实际上并没有验证HTML、partial或损坏的标记可能导致删除的文本/数据比预期的要多。

此函数不会修改您允许使用allowable_tag,包括style和onmouseover恶作剧用户在发布文本时可能滥用的属性将显示给其他用户。

这是一个已知的问题。还有一些库可以更好地清理HTML和JS,以防止中断。

  1. 更复杂的解决方案是使用一些高级库来清理HTML代码。例如,这可能是HTML净化器

文件中的报价

HTML净化器不仅会删除所有恶意代码(更广为人知的是XSS)拥有一个经过彻底审核、安全但允许的白名单还将确保您的文档符合标准只有全面了解W3C规范。

存在解决相同任务的其他库。例如,您可以查看本文中比较库的位置。最后你可以选择最好的一个。

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

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

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

您可以使用strip_tags()来删除不需要的标记。阅读本手册:http://php.net/manual/en/function.strip-tags.php

示例1(基于手册)

<?php
$text = '<p>Test paragraph, <a href="#">With link</a>.</p>';
# Output: Test paragraph, With link. (Tags are stripped)
echo strip_tags($text);
echo "'n";
# Allow <p> and <a>
#Output: <p>Test paragraph, <a href="#">With link</a>.</p>
echo strip_tags($text, '<p><a>');
?>

我希望这对你有帮助!