我正在使用Php和Mysql构建一个小型/测试CMS。 在添加,编辑,删除和显示级别上,一切都工作得非常好,但在完成我的代码之后,我想在Admin后端添加一个WYSIWYG编辑器。
我的问题是我使用转义方法希望使我的表单更安全并尝试逃避注入,因此在我的编辑器中添加样式文本,图像或任何其他HTML代码时,我将它们打印为行我页面上的代码(避免攻击是完全正确的。)
MY ESCAPE METHOD:
function e($text) {
return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');}
有没有办法解决我的转义方法(认为不应该这样做,因为如果我可以做到每个攻击者都可以)。
或者我应该将我的转义方法改为另一种方法吗?
答案 0 :(得分:2)
如果我理解正确,您将允许您的用户在他们要创建的文本中添加一些格式。为此,您将添加一些WYSISWYG编辑器。但问题是如何区分允许的格式和特殊字符与不允许的格式。您需要清理文本并仅保留有效的允许格式(HTML标记)并删除所有恶意JavaScript或HTML。
这不是一件容易的事,就像它在第一时间听起来一样。我可以在这里看到几种方法。
strip_tags
的最简单解决方案,并指定允许使用的标记。但请记住,strip_tags
并不完美。我在这里引用手册。
因为strip_tags()实际上并不验证HTML,部分或 破碎的标签可以导致删除比预期更多的文本/数据。
此功能不会修改您的标签上的任何属性 允许使用allowable_tags,包括样式和onmouseover 发布文本时恶作剧用户可能滥用的属性 将向其他用户显示。
这是一个已知问题。存在可以更好地清理HTML和JS以防止中断的库。
从文档中引用
HTML Purifier不仅会删除所有恶意代码(更好地称为 XSS)具有经过全面审核,安全且宽容的白名单,它 还将确保您的文件符合标准 只有全面了解W3C才能实现 规格。
存在解决相同任务的其他库。您可以查看此article where libraries are compared。最后你可以选择最好的一个。
使用简单的文本标记可以让您完成避免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>');
?>
我希望这会对你有所帮助!