如何在不丢失HTML和删除JS / SQL的情况下清理字符串

时间:2015-07-17 05:26:23

标签: php sanitization rich-text-editor input-sanitization

我使用Rich Text Editor接受来自客户端的HTML内容的输入数据。

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

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

3 个答案:

答案 0 :(得分:5)

据我所知,没有这种内置功能。<​​/ p>

来自http://php.net/manual/en/filter.filters.sanitize.php的清理过滤器不会涵盖您的请求。您可以查看http://php.net/manual/en/book.filter.php,但没有设置过滤器来过滤HTML。

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

答案 1 :(得分:3)

关于SQL注入,您应该使用PDO with prepared statements。这样,您发送到数据库的字符串与您想要的字符串完全相同,您不需要使用它并逃脱。

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

如果你使用一些已知的框架,他们中的大多数都有内置的xss过滤器,所以你可以使用它(或take look代码并从中学习。)

答案 2 :(得分:3)

使用预准备语句和参数化查询来阻止SQL injections

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

$(document).ready(function () {

    $('.progress .circle').removeClass().addClass('circle');
    $('.progress .bar').removeClass().addClass('bar');
    $(".circle").first().addClass("active");

    var timer = setInterval(increment, 1000);

    function increment() {
        $(".circle:not(.done)").first().removeClass("active").addClass("done").children(":first-child").html("&#10003;");
        $(".circle:not(.done)").first().addClass("active");
        $(".circle.done").next().addClass("done");
        if ($(".active").find(".title").text() == $("tr:last-child").find("span").text()) {
            clearInterval(timer);
        }
    }
});