4

我正在使用富文本编辑器从客户端接受具有 HTML 内容的输入数据。

在服务器端,我使用基于 PHP 的服务器并清理传入的数据。

是否有内置的 PHP 功能,它保留了 HTML 代码并删除了用于 XSS + SQL 注入代码的 Javascript。

4

3 回答 3

6

据我所知,不存在这样的内置功能。

http://php.net/manual/en/filter.filters.sanitize.php中的清理过滤器似乎无法满足您的要求。您可以查看http://php.net/manual/en/book.filter.php,但没有设置过滤器来过滤 HTML。

我知道您不要求外部库,但我认为这可以帮助您解决您面临的问题:http: //htmlpurifier.org/

于 2015-07-20T11:06:38.770 回答
4

使用准备好的语句和参数化查询来防止SQL 注入

如果您只想允许将某些标签保存在数据库中,您可以使用strip_tags()。它使您可以允许某些 HTML 标记。但是,注释和 PHP 标记将始终被删除。

$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
于 2015-07-20T13:01:38.207 回答
3

关于 SQL 注入,您应该将PDO 与准备好的语句一起使用。这样,您发送到数据库的字符串与您想要的字符串完全相同,您无需使用它并逃避事情。

关于 XSS - 你应该看看owaspXSS Filter Evasion Cheat Sheet。你可以在这里做几件事——你可以只允许已知的标签(并使用 php 的strip_tags函数去除所有其余的标签)。请注意,它不会阻止元素属性内部的 XSS(检查备忘单链接)。 您可以使用DOMDocument解析器来遍历所有元素并检查它们的属性并保留/删除您想要的任何内容。检查此以获取更多信息。

如果您使用一些已知的框架,其中大多数都有内置的 xss 过滤器,因此您可以使用它(或查看代码并从中学习)

于 2015-07-20T13:01:28.037 回答