使用WYSIWYG Editor和PHP转义方法

时间:2016-04-21 07:32:33

标签: php mysql escaping

我正在使用Php和Mysql构建一个小型/测试CMS。 在添加,编辑,删除和显示级别上,一切都工作得非常好,但在完成我的代码之后,我想在Admin后端添加一个WYSIWYG编辑器。

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

MY ESCAPE METHOD:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

这不是一件容易的事,就像它在第一时间听起来一样。我可以在这里看到几种方法。

  1. 使用strip_tags的最简单解决方案,并指定允许使用的标记。
  2. 但请记住,strip_tags并不完美。我在这里引用手册。

      

    因为strip_tags()实际上并不验证HTML,部分或   破碎的标签可以导致删除比预期更多的文本/数据。

         

    此功能不会修改您的标签上的任何属性   允许使用allowable_tags,包括样式和onmouseover   发布文本时恶作剧用户可能滥用的属性   将向其他用户显示。

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

    1. 更复杂的解决方案是使用一些高级库来清理HTML代码。例如,这可能是HTML Purifier
    2. 从文档中引用

        

      HTML Purifier不仅会删除所有恶意代码(更好地称为   XSS)具有经过全面审核,安全且宽容的白名单,它   还将确保您的文件符合标准   只有全面了解W3C才能实现   规格。

      存在解决相同任务的其他库。您可以查看此article where libraries are compared。最后你可以选择最好的一个。

      1. 完全不同的方法是避免用户编写HTML标记。让他们写一些其他标记,而不是像在StackOverflow或Basecamp或GitHub上完成的那样。 Markdown可能是一个很好的方法。
      2. 使用简单的文本标记可以让您完成避免HTML和JavaScript损坏的问题,因为您可以自行转义所有内容并自行构建HTML标记。

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

答案 1 :(得分:1)

您可以使用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>');
?>

我希望这会对你有所帮助!